调用统一支付订单时可以正常返回:{nonce_str=FpD6R1U11WKTUYbp, appid=wx91e98d675635aba8,
sign=C5514D37F75A20B99D795E7960CC939BE7142B19D9BF1F3A8A264515A17C023F,
trade_type=APP, return_msg=OK, result_code=SUCCESS, mch_id=1561311951,
return_code=SUCCESS, prepay_id=wx111602087022884ca87ae82a1123359500
}
然后针对返回值进行签名:
Map<String, String> map = new HashMap<String, String>();
String prepay_id=resp.get("prepay_id").toString() ;
map.put("appid", wxpayUntil.systemParams.getWx_pay_appid());
map.put("partnerid", wxpayUntil.systemParams.getWx_mchID());
map.put("package", "Sign=WXPay");
map.put("prepayid",prepay_id );
map.put("noncestr", nonce_str);//与请求prepayId时值一致
map.put("timestamp", timestamp);//时间搓 例如:1573459309
String sign_app = WxMD5Util.getSign(map, key); //针对前端返回的数据进行签名
客户端根据返回内容进行:
调起支付界面 返回-1 吊起失败 。请问是什么原因。
首先按文档中业务流程和开发步骤接入,按照文档流程排查;如果还有问题,需要按以下环节排查:
#1、统一下单返回是否正常(
后面步骤都用到了这个接口的appid,mchid,prepayid,看参数是否匹配
)#2、第二次签名过程是否正确(此步骤商户一定要严格按文档的参数列表来做签名,用签名工具做校验)
#2.1、此处涉及一个细节:该接口没有sign_type参数,
如果统一下单用的HMAC-SHA256签名,本步骤也必须按HMAC-SHA256
;#2.2、本次签名的参数列表要跟文档完全匹配:大小写要一致,参数值要与统一下单接口的保持一致,
特别注意参数名:partnerid,取值为mchid
(开平SDK历史原因,无法改名)#2.3、本步骤生成的sign与统一下单的不是同一个,经常有商户直接传同统一下单接口的sign过来
#3、检查客户端调用sendReq(PayReq)对象赋值的正确性,有一种情况是商户会通过异步获取到后台数据,比如data对象是通过异步请求得到的对象:request.appId = data.appid; 实际appid属性值为空
#4、 检查配置
#4.1、 Android要求在开放平台后台配置正确的应用签名和包名,可以引导商户提供配置截图
#4.2、 IOS则不需要在开平配置,而是要求商户在开发环境红配置正确的URLSchemes为对应APPID