在开发一个小程序,需要在小程序中领取卡券,因为官方文档写的比较粗糙,遇到一些小问题,特此记录。首选简述开发流程。
1 开通公众号的卡券功能,通过微信公众平台的卡券api创建卡券。
2 申请开放平台账号,将小程序与公众号绑定在同一个开放平台下
3 在小程序中通过wx.addCard添加领取卡券接口,重点说下接口的扩展字段参数
cardExt: ‘{“timestamp”:”‘ + dataInfo.timestamp + ‘”,”signature”:”‘ + dataInfo.signature + ‘”,”nonce_str”:”‘ + dataInfo.nonceStr + ‘”}’
如果你有自定义code,并且指定了领取人的openid,那么也要传入这个两个字段,这些字段都是从后端获取的,并这些字段都是用于签名的字段,重点说下签名,调用微信卡券需要签名,签名规则官方文档有,这里给出简单示例
public String ByteToHexString(byte[] data) { StringBuilder str = new StringBuilder(); for (byte b : data) { String hv = Integer.toHexString(b & 0xFF); if( hv.length() < 2 ) str.append("0"); str.append(hv); } return str.toString(); } public String getTheSignature(ArrayList<String> param_sign) { Collections.sort(param_sign); StringBuilder string_to_sign = new StringBuilder(); for (String str : param_sign) { string_to_sign.append(str); } try { MessageDigest hasher = MessageDigest.getInstance("SHA-1"); byte[] digest = hasher.digest(string_to_sign.toString().getBytes()); return ByteToHexString(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return e.getMessage(); } }
这里主要一定要排序,否则会有问题,这里有个坑,就是官方给出的签名验证工具没有对参数进行排序,导致正确的签名验证不通过,误导了许多人,这里注意了。