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

使用安卓设备领取结果

使用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)
阿神

私は 2 日間この問題に悩み、ここに投稿しました。その結果、レビュープロセス中に解決策を見つけましたが、問題をさらに掘り下げることはしませんでした。後で検証します。

開発ドキュメントには次のように記載されています:
cardExt の詳細については付録 4 を参照してください。ここでの Card_ext パラメータは署名に含まれるパラメータと一致している必要があり、形式はオブジェクトではなく文字列であることに注意してください。署名エラーが報告されます。

カードリスト: [{

リーリー

そして、var config1 = strToJson(wxconfigstr1);
function strToJson(str) {

を使用しました。 リーリー

};
2 つの可能性があると思います。
まず、IOS は config1 の Card_ext をオブジェクトとして解析し、Android は文字列として解析します。
次に、IOS と Android は config1 の Card_ext をオブジェクトに解析しますが、Android はカプセル化のステップを実行して、それを文字列に変更します。
さらに検証される予定。

最後の解決策は、card_ext に文字列値を割り当てることです。

いいねを押す +0
左手右手慢动作

私もあなたと同じような奇妙な問題に遭遇しました。
コードはあなたのものとほぼ同じです。問題は次のとおりです。
成功時のcloseWindowエラーとaddCard後のキャンセル
それはcardExtの問題でもありますか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート