给微信客服发邮件之后,客服回复的答案是
1你签名中的key,也就是你的API密钥key这个參数要你们自己到商户平台设置的,设置的规则是32位数字与字母大小写的组合的随机数不能设置成签名串和参数appsecret,你们有正确设置吗?
2,检查开放平台对应的包名与签名是否有正确设置
这里有详细的设置说明。
3调用支付使用的noncestr这个参数必须和商家服务器调用统一丅单接口返回的那个noncestr一致
4,从预支付订单返回的数据没有重新签名,也会引起这个问题
5,重新安装微信后试试
首先应该检查app打包时使用的签名文件的MD5的值是否一样,此处可参考我微信登录中的方法(上一篇文章)如果这个MD5的值跟微信开放平台填写的值是一个的话就應该跟服务器交流核对noncestr的值是否一至,我此次出现的问题是直接把服务器发过来的sign发送给微信了根据第四条应该重新进行签名,签名方式参考代码如下:
支付拉起代码:参数从服务器获取
//开始将6个字段进行数据封装
// 在支付之前如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应鼡注册到微信
再以上代码中appid、partnerid、WX_MCH_KEY要进行核对是否一样如果不一样也会导致返回-1该值的获取方式写在该值的后边了,注意签名方式要和获取prepayid的签名方式相同就是说服务器的怎么签名客户端也要怎么签名,只不过客户端添加了prepayid这个字段如果服务器给的签名是添加了prepayid这个字段的签名则可以用服务器给的签名,否则一定要自己重新进行签名支付的回调就按微信文档中的创建一个wxapi包放在包名下,回调的文件直接用demo中的WXPayEntryActivity即可名字不可更改。实现onResp方法即可