最近自己弄微信公众号支付,遇到各种坑,但归结起来,由于微信文档比较粗燥,调理比较乱,“技术大拿”自视过高,对小白比较藐视,当然,我觉得这是文化问题,也是为了让自家兄弟有外快收入问题,如果太easy了,内部创业留给技术呆子的空间就相对更小了,这样,好歹让跟着老大干的兄弟干点私货还是可以赚不少外快,通过人为的技术壁垒达到共同发财的目的,这也是技术人常用的手段,可以理解。
1、缺参数
这个问题,一般发生在参数要嘛漏掉,要嘛输入错误,严格按文档上的进行。尤其注意sign 签名,需要提前把其他参数准备号,然后通过参数来获取sign。然后再加进去,这个可以参考https://www.cnblogs.com/schyzhkj/p/12489933.html里面的描述。
2、调用支付jsapi缺少参数:appld
这个错误不是很精准,有可能是你的api密钥问题,有可能是你确实漏了参数,有可能是不能字符集问题,比如你里面有中文字符,而你没有做相应的编码处理。如果后端返回前端数据是正确的,那么就可能是前后端字符大小写没有对上的问题,比如,后台你用的是appId,而前面的js里面你用的是appid。也有可能你直接把后面比如java的map直接返回了,而返回前你没有做很号的json处理(比如用JSON.toJSONString(map)处理一下再返回),前面得到字符串你确想用JSON 方式来访问,都可能产生上面的错误,错误提示非常不精准,过于粗燥,我觉得“技术大拿”故意为之的可能性很大,因为这个要优化起来并不难,主要是考虑到兄弟门的利益问题。
3、支付验证签名失败
这个错误,有可能是签名不统一造成,比如两次中,一次用md5,一次用HA256。或者是参数拼写错误,或者是中文问题,都有可能。如果返回到前端都是正确的,那也有可能是你参数个数或者大小写没匹配,尤其是参数个数,这个很多人容易忽略,如果你后端返回前端是7个,你缺提交6个,那也完全可能造成这个问题。
总之一句化,错误提示不够精准。各种坑。比较耗精力而已。当然,上面说到的利益的问题,纯属调侃,切莫对号入座,哈哈哈哈哈。