jssdk - 为什么IOS设备,调用微信添加卡券接口,报签名错误,而安卓正常?
PHP中文网
PHP中文网 2017-04-17 17:25:01
0
2
616

使用安卓设备领取结果

使用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中文网

认证高级PHP讲师

모든 응답(2)
阿神

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

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

카드 목록: [{

으아악

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

을 사용했습니다. 으아악

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

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

左手右手慢动作

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿