前段时间准备做支付,申请开通了微信支付,然后简单的弄了几下就看到支付页面了,
但是现在,当需要投入到生产环境中时,问题就来了!
坑一:H5调起支付API报错, 缺少参数appId
缺少 appId $key0$ 这种的,这个奇葩的问题调试了整整一个下午,因为很确定参数是对的,可就是报错,
最后发现原因是:js使用gulp压缩之后变掉了,比如那个参数列表 本来是:{"appId":xxx .... 的,压缩后变成 {appId:xxx ..... 莫名其妙的就把双引号去掉了!! 好的,既然双引号去掉了,那就给他加上呗,结果加上后还是报错,具体报错原因到底是外部js还是gulp还是什么,已经不想纠结了,反正就是有问题!
最后,还是采用了官方文档的形式,js直接写在页面里,免得出啥子幺蛾子
坑二:商户单号重复!
注意: pc - 扫码支付 wechat - 公共号支付
这个错误发生的场景是这样的,用手机下单,然后点击支付(调用统一下单),然后取消支付,然后在pc上点击支付,这时候统一下单就报错了;同理,反过来先在pc上调统一下单,再手机上调也是不行的
因为是使用的订单号(原始单号,订单唯一凭证)作为 out_trade_no 的,所以出现了这个错误,百度了一下后发现很少人提这个问题,答案也少
最后呢,去京东充话费做实验,发现它的商户单号是一串很长很长的数字... ,不像是订单号来的!
结论:不该直接用订单号做商户订单号!
解决方案1:建立一个单号系统,每次发起支付都生成新的商户单号,与订单号做关联, (好麻烦,感觉不可取)
解决方案2:为商户单号加后缀,区分每种支付方法(这种方式简单)
其它解决方案:还不知道
不管方案一还是方案二,都需要做一些处理来避免重复支付,这个就不细说了,其实期望更好的解决方案,没办法,没人教,只能自己摸索