欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

H5App 调用微信支付 报错-100,payment微信-1 general errors

程序员文章站 2022-03-28 13:48:19
...

H5APP调用微信支付遇到的问题

	这几天调用微信支付,遇到了不少问题,现在记下来,以防自己忘记,也可以供大家参考一下。

一、前端

首先,我的APP是用H5做的,配置appid是在json文件中配置。

H5App 调用微信支付 报错-100,payment微信-1 general errors
H5App 调用微信支付 报错-100,payment微信-1 general errors 配置的时候确认appid对不对,appid不对也会导致报错-1。
接下来就是调用微信支付了,按照H5的API文档,文档地 址:http://www.html5plus.org/doc/zh_cn/payment.html#plus.payment.PaymentChannel,要先获取支付通道,再调取支付。
H5App 调用微信支付 报错-100,payment微信-1 general errors
H5App 调用微信支付 报错-100,payment微信-1 general errors
注意:statement的数据时从后端获取的订单信息。
下面是我的数据格式,package的值在微信官方文档上是暂填写固定值Sign=WXPay

var varpay = {
		"appid": that.payData.appId, //appid
		"noncestr":that.payData.nonceStr, //随机字符串
		"package": "Sign=WXPay",
		"partnerid": that.payData.partnerid, //商户号 
		"prepayid": that.payData.prepayid, //预支付交易会话id
		"timestamp":that.payData.timeStamp, //时间戳 
		"sign": that.payData.sign, //微信签名 
			}

到这里的时候,发起微信支付,一直报错{-100,payment微信-1 general errors},就开始按照其他的博客上写的去排查。

  • 首先查看包名和微信开放平台的包名是否一致
  • Hbuilder的真机调试可能会影响调起微信支付,建议用自持有的证书,打包成apk安装。自持有证书的获取可以参考网站:https://ask.dcloud.net.cn/article/35985。另建议打包的时候用自定义调试基座,这样打包好的安装包也可以在线调试啦。
  • 查看应用签名是否正确,应用签名的获取可参考微信开发文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5,如果获取的签名和微信开放平台上的不一致,可修改开放平台上的应用签名,修改好后要等几分钟再测试。
  • 核对商户号是否正确
  • 确认获取到了预支付订单编号(partnerid)

二、Java后端

  • List item Java的后端用的是微信的demo,首先也要保住商户号、key、appId、微信支付路径等不出错。
  • 还有注意开发文档的业务流程的第3步,在返回数据给前端之前,一定要再次按照签名规则重新生成签名,并且参与签名的字段只需要这几个:appid,partnerid,prepayid,noncestr,timestamp,package
    H5App 调用微信支付 报错-100,payment微信-1 general errors生成二次签名 注意:参与签名的几个字段必须小写,而且顺序也不能错
  HashMap<String, String> map = new HashMap<>();

            map.put("appid", placeOrder.get("appid"));
            //商户号
            map.put("noncestr", placeOrder.get("nonce_str"));
            map.put("package", "Sign=WXPay");
            map.put("partnerid", placeOrder.get("mch_id"));
            map.put("prepayid", placeOrder.get("prepay_id"));
            map.put("timestamp", timeStamp);

            System.out.println("------" + map);
            String s = WXPayUtil.mapToXml(map);
            System.out.println(s);

            String sign = WXPayUtil.generateSignature(map, WXPayConstants.key, WXPayConstants.SignType.MD5);
            System.out.println("------------------------" + sign);
  • 如果用的是微信的官方demo,在WXPay.Java中的此处修改。
    H5App 调用微信支付 报错-100,payment微信-1 general errors我的就是到了这一步,就能调起微信啦。
    H5App 调用微信支付 报错-100,payment微信-1 general errors
    由于第一次写博客,描述的不好的还望见谅,这些就是我调用微信支付是遇到的问题,如有遗漏,还望大家补充,谢谢!