微信 JS SDK 中的添加卡券问题

2015-06-24 11:15:44 +08:00
 delavior

添加卡券是随便就可以加吗?还是需要什么东西?
测试添加卡券,显示"system error"

js代码如下:

function addCard() {
    wx.addCard({
        cardList: [{
            cardId: '100001',
            cardExt:'{"code":"","openid":"","nonceStr":"${api_nonceStr}", "timestamp": ${timestamp}, "signature":"${signature}"}'
        }],
        success: function (res) {
            alert('已添加卡券:' + JSON.stringify(res.cardList));
        }
    });
}

生成签名的后台代码如下:

public static String makeApiSignature(String api_ticket, String timestamp, String nonce_str) {
    String card_id = "100001";
    String[] values = {api_ticket, timestamp, card_id, nonce_str};
    Arrays.sort(values);
    String sourceStr = "";
    for (int i = 0; i < values.length; i++) {
        sourceStr += values[i];
    }

    LOGGER.info("source:" + sourceStr);
    String signature = "";
    try {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        md.reset();
        md.update(sourceStr.getBytes("UTF-8"));
        signature = byteToHex(md.digest());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return signature.toUpperCase();
}

private static String byteToHex(final byte[] hash) {
    Formatter formatter = new Formatter();
    for (byte b : hash) {
        formatter.format("%02x", b);
    }
    String result = formatter.toString();
    formatter.close();
    return result;
}

其中nonce_str用的是randomUUID截取前16位

请问是啥原因啊

3914 次点击
所在节点    问与答
13 条回复
defia
2015-06-24 11:22:22 +08:00
我看了一下我这里生产环境下用的代码,CardExt里首先code openid压根都没写,其次压根没有nonceStr
defia
2015-06-24 11:23:21 +08:00
也就是说,CardExt里只有timestamp和signature
delavior
2015-06-24 11:24:44 +08:00
@defia 但是微信js sdk里关于cardext的说明中nonceStr是必填的啊
defia
2015-06-24 11:39:25 +08:00
@delavior 可能是新加的,以前没这个。。。另外我看了下api,字段名不是叫nonce_str么,你代码里缺少了下划线
defia
2015-06-24 11:42:38 +08:00
@delavior 还有就是你这个CardId是正确的吧,这个指的是这类卡的id,不是发给用户的序号
crs0910
2015-06-24 11:56:59 +08:00
@defia 请问下 signature 这个是怎么算出来的,微信的文档里面写的是把几个参数的值按照字典序排序然后加密,但是官方下面给的例子又不是按照字典序排序来的。
crs0910
2015-06-24 12:05:55 +08:00
lz 是江大神么?
delavior
2015-06-24 13:01:47 +08:00
@defia 字段名确实写错了,不过改了还是同样的错;至于卡,我没有啊,我就是想问,要测试添加卡券需要什么前提条件。。。
delavior
2015-06-24 13:02:52 +08:00
@crs0910 你是问@defia吧,我不是大神,我也不姓江,/汗
defia
2015-06-24 13:34:53 +08:00
@delavior 。。。。这。。。你先要有卡券权限。。。然后用卡券接口去创建卡券,获得卡券ID,才能用这个api发给用户。。卡券功能可能是还在内测中,具体的申请方法我就不知道了。。关于card_ext里的nonce_Str,我问了微信那边的人,确实是新加入的

@crs0910 你仔细看看,签名有好几个,方式有2种,一种是按值的字典序,一种是按字段名的字段序(腾讯该死)
mgcnrx11
2015-06-24 19:54:12 +08:00
@defia 哈哈,又是时候喊一句,腾讯去死了
LuckyHJH
2015-06-24 21:21:34 +08:00
搞腾讯的东西真的蛋疼得要死,想当初搞微信卡券的时候,最后变成直接弃用,然后自己生成兑换码,再做了个网页来验证 - -
daylight890307
2015-07-25 10:20:53 +08:00
我也是遇到了这个问题 请问楼主解决了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/200745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX