关于如何添加卡券到微信卡包的坑

首先,已经读取到了cardId,此时需要去生成签名,注意,此时已经使用config配置,即添加了addCard,openCard等方法,此处略过,本文主要讲添加卡包用到的签名

1.生成签名

(注:属于前端模拟,最好由后端生成)

var cardId = 'xxxxxxxxxxxx'
  var timestamp = '1514292155'
  var api_ticket = 'xxxxxxxxxxxxxxxxx'
  var nonceStr = '1qaz2wsx'
  var arr = new Array(api_ticket,nonceStr, timestamp, cardId);

  // 转为字符串
  arr = arr.map(function(n) {
    return n.toString();
  });

  // 字典序排序
  arr = arr.sort();

  // 拼接为字符串
  var str = arr.join("");

  // 进行SHA1加密,sha1算法需自行实现
  var signature = hex_sha1(str)
  console.log('signature:', signature)

总共需要四个参数,其中的api_ticket需要通过接口返回,第一步要获取token,第二步,通过获取的token获取ticket,获取token通过appid和secret,获取ticket通过以下的方法

// 获取ticket
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=xxx&&type=wx_card
// 获取token
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

然后就可以生成签名了

2.调用addCard

 var signature = 'xxxxxxx'
        var timespan = '1514292155'
        var nonceStr ='1qaz2wsx'
        var api_ticket = 'm7RQzjA_ljjEkt-JCoklRB7LfGKT7x8UsKpnVAopKOzvW4eFSq6HSbKKxAOjvlQ0AYy0tq5rprFdtFfy_WsPWw'
        var ext = '{"api_ticket":"'+api_ticket+'","card_id":"'+cardId+'","nonce_str":"'+nonceStr+'","timestamp": "'+timespan+'", "signature":"'+signature+'"}'
        console.log('extextextextextext:', ext)
        wx.addCard({
          cardList: [
            {
              cardId: cardId,
              cardExt:ext
            }
          ],
          success: function (res) {
            
          },
          cancel: function (res) {
            alert(JSON.stringify(res))
          }
        })

这里有一点需要注意,card_id必须和生成签名的保持一致,timestamp必须和生成签名的保持一致,nonce_str必须和生成签名的保持一致,注意是用下划线连接,另外网上查到timespan必须是以秒为单位,我在这边遇到的坑就是把nonce_str写成了nonceStr,一直报签名错误

你可能感兴趣的:(关于如何添加卡券到微信卡包的坑)