收藏
回答

服务商模式刷脸支付 java获取调用凭证一直报错?

long  now=System.currentTimeMillis()/1000;
Map map =  new LinkedHashMap<>();
DeviceSubmerchants deviceSubmerchants=this.getSubmerchantsId(deviceId);
String nonceStr =this.getRandomStringByLength(32);
String aa="{\"address\":\"北京市西城区\",\"age\":\"23\",\"name\":\"JSON\"}";
map.put("appid",openId);
map.put("cmd","get_wxpayface_authinfo");
map.put("attach",aa);
map.put("device_id",deviceId);
map.put("mch_id",mchId);
map.put("nonce_str",nonceStr);
map.put("now", Long.toString(now));
map.put("rawdata",rawdata);
map.put("sign_type","MD5");
map.put("store_id",storeId);
map.put("store_name",storeName);
map.put("sub_appid",deviceSubmerchants.getSubAppid());
map.put("sub_mch_id",deviceSubmerchants.getSubMchId());
map.put("version","1");
String signStr = String.format("appid=%s&attach=%s&attach=%s&device_id=%s&mch_id=%s&nonce_str=%s&now=%s&rawdata=%s&sign_type=%s&store_id=%s&store_name=%s&sub_appid=%s&sub_mch_id=%s&version=%s&key=%s",
        openId,aa,"get_wxpayface_authinfo",deviceId,mchId,nonceStr, Long.toString(now),rawdata,"MD5",storeId,storeName,deviceSubmerchants.getSubAppid(),deviceSubmerchants.getSubMchId(),"1",key);
String signMD5 = MD5Util.getMd5String(signStr);
map.put("sign", signMD5.toUpperCase());
String requestXmlStr =XmlUtil.MapToXML(map);
logger.info("统一下单参数xml:" + requestXmlStr);
// 返回xml结果
String responseXmlStr = HttpRequestUtils.post(WxAuthinfoUrl, requestXmlStr);


下面是请求的xml   搞不懂啊 一直报签名错误,只有获取凭证,下单报这个错,查询和撤销都没有问题
最后一次编辑于  2021-06-22
回答关注问题邀请回答
收藏

1 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    2021-06-22

    签名错误问题可以按照以下几点进行排查:

    1、使用签名检查工具校验签名算法是否有误

    2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)

    3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)

    4、确认参数的大小写,参数名与接口文档一致

    5、签名原串的参数值使用原始值,不需要encode

    6、接口需要使用UTF-8编码

    特别注意以下重要规则:

    1. ◆ 参数名ASCII码从小到大排序(字典序);
    2. ◆ 如果参数的值为空不参与签名;
    3. ◆ 参数名区分大小写;
    4. ◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
    5. ◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段


    2021-06-22
    有用 1
    回复
登录 后发表内容