搞了好几天,终于搞定了,分享出来一样希望有缘人少走弯路,少踩坑!
之前开发过微信支付成功的小伙伴适合看本文档,没开发过得可能看不懂,那就抱歉了!我不计划在这里分享微信支付的代码!
一、首先申请退款和企业付款都是需要证书的。从商户后台拿到,具体操作百度里很多不多说了。
二、我用的python 3.6中的requests模块,在用post方法时我用下面的方法指定证书和密钥,别急看完再说!
apiclient_cert = "{}/cert/apiclient_cert.pem".format(BASE_DIR)
apiclient_key = "{}/cert/apiclient_key.pem".format(BASE_DIR)
res = requests.post(pre_url, cert=(apiclient_cert, apiclient_key), data=xml.encode('utf-8'), headers={'Content-Type': 'text/xml'})
其中data是接口中要求传入的参数,需要转xml后提交,特别说下out_trade_no,是支付成功后微信返回的,你可以对比商户后台交易单确认这点,所以在支付时要缓存下来,最好写在订单里面去!data里签名的计算就不说了如果你做过支付,方法是完全一样的。
看到这里可能你会说你试过了我的方法,提示证书验证失败,那就对了,下面才是重点!在代码中打印一下这个路径,
requests.certs.where()
路径下有个cacerts.pem。去打开你的apiclient_cert.pem,复制begin到end部分文本,记得begin和end也要,具体可参考现在cacerts.pem里面的样式,把复制好的代码贴在开头部分,然后再去试试,你应该已经成功了!
我试过后发现,cert参数不能不传哦!