찾다

 >  Q&A  >  본문

jssdk - 为什么IOS设备,调用微信添加卡券接口,报签名错误,而安卓正常?

使用安卓设备领取结果

使用ios设备领取结果

调用时的token:_j5pCqFql151jN3hrQZfdsULPBMCyMsL3-6PnQKhHHT1xd5LO_DOjYWG9ZTr_BPYNkNV3riYVJBsql34SSORlk7--nvpKyS9_Vu69eid08cXEUgAGAQXN
调用时的apiticket:m7RQzjA_ljjEkt-JCoklRAv1CEm-BtI3wtBMdD1vRTqF6-dSZw8DD0sOClSh9FbTQ-rqpBFsw4j0r-nXNqyncw
调用时的jsapiticket:bxLdikRXVbTPdHSM05e5u-nGyw_RTvOVBQl2rntjEm6Mia6_h_tArfj2hSKVtX0Fu5-MKPaU9muHpQt7yfpztg

微信web调试工具:
card_ext {5}
code :
nonce_str : hLucummFJqISxUx
openid :
signature : 5c2054a6a90e291bdc3bf15c29805e49ef0aeff5
timestamp : 1453186049
card_id : p2HbijhIYRhCA1YSHYNXbU93CtT4

调试工具生成的签名:

前端部分代码:

wx.config({
                    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                    appId: config.appId, // 必填,公众号的唯一标识
                    timestamp: config.timestamp, // 必填,生成签名的时间戳
                    nonceStr: config.nonceStr, // 必填,生成签名的随机串
                    signature: config.signature,// 必填,签名,见附录1
                    jsApiList: ['addCard', 'closeWindow']// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
                wx.ready(function () {
                    setTimeout("add_card_local();", 1000); 
                });
                wx.error(function (res) {
                });
                
                
         wx.addCard({
                cardList: [{
                    cardId: config1.card_id,
                    cardExt: config1.card_ext
                }], // 需要添加的卡券列表
                success: function (res) {
                    wx.closeWindow();
                },
                fail: function (res) {
                    //wx.closeWindow();
                },
                cancel: function (res) {
                  // wx.closeWindow();
                }
            });

系统运行环境:
winserver 2008.
.net framework 4.5.
IIS 7.5.

PHP中文网PHP中文网2771일 전617

모든 응답(2)나는 대답할 것이다

  • 阿神

    阿神2017-04-17 17:27:01

    이틀 동안 문제를 고민하다가 여기에 올렸습니다. 결과적으로 검토 과정에서 해결책을 찾았지만 계속해서 문제를 조사하지는 않았습니다. 나중에 확인하겠습니다.

    개발 문서에는 다음과 같이 명시되어 있습니다.
    cardExt에 대한 자세한 내용은 부록 4를 참조하세요. 여기에서 Card_ext 매개변수는 서명과 관련된 매개변수와 일치해야 하며 형식은 Object가 아닌 문자열이라는 점에 유의할 가치가 있습니다. 서명 오류가 보고됩니다.

    카드 목록: [{

    으아악

    그리고 저는 var config1 = strToJson(wxconfigstr1);
    function strToJson(str) {

    을 사용했습니다. 으아악

    };
    두 가지 가능성이 있다고 생각합니다.
    첫째, IOS는 config1의 카드_ext를 객체로 구문 분석하고, Android는 이를 문자열로 구문 분석합니다.
    둘째, IOS와 안드로이드는 config1의 카드_ext를 객체로 파싱하는데, 안드로이드는 캡슐화 단계를 거쳐 문자열로 변경합니다.
    추가 확인 예정.

    최종 해결책은 카드_ext를 문자열로 할당하는 것입니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 17:27:01

    나도 당신과 비슷한 이상한 문제에 직면했습니다.
    코드가 귀하와 거의 동일합니다. 문제는
    성공 시 closeWindow 오류가 발생하고 addCard 이후 취소
    cardExt 문제이기도 합니까?

    회신하다
    0
  • 취소회신하다