Django微信支付介绍
微信支付平台,对支付的要求,相当严格。(不支持个人开通,支持个体工商户、企业、其他组织等)
微信支付开通地址
https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2Findex.php
支付产品:
付款码:超市扫码使用。
JSAPI支付
查看开发文档:
接入微信支付(首页)
微信承认的组织,必须是国家承认,必须有证书
我们现在放弃微信,但是微信的步骤和支付宝相识。
Django支付宝支付实施
- 开通开发者权限
https://open.alipay.com/platform/home.htm
研发中心,有网页移动应用(生产环境,需要自己创建app应用)。沙箱环境(测试环境,已经创建好了app应用)
2.进入沙箱环境
3.编写接口请求的代码
需要设置应用公钥,点进去有下面的查看密钥生成方法。
查看生成公钥和私钥的方式。
双击
会将生成的公钥和私钥自动的保存到RSA密钥中,但是不能使用,因为保存的是.txt格式,而上传应用证书使用的是.crt格式,因此会报错。
支付宝严格要求公钥和私钥的格式,直接读入公钥和私钥会报格式错误
然后我们回到沙箱设置的页面,将公钥设置好
公钥和私钥要生成自己服务器。
支付流程:
支付逻辑
首先查看电脑网站支付的步骤案例
https://docs.open.alipay.com/270
我们作为网站开发方,需要的步骤
- 接收订单
- 跳转请求支付宝,发起的支付请求
- 提供支付宝返回支付码的调用页面
- 等待确认收款的状态
同步 等待的途中不干其他的事情,进入阻塞状态
异步 等待的同时可以进行其他操作
我们着重研究一下支付宝支付接口。
支付宝支付接口有完整的文档和案例,但是没有python的案例,所以我们有两个选择
- 自己编写
- 调用三方的api
自此之前,我们看一下支付宝关于支付的接口要求
然后查看api接口规范
https://docs.open.alipay.com/api_1/alipay.trade.pay
查看签名
https://docs.open.alipay.com/api_1/alipay.trade.pay
https://docs.open.alipay.com/291/105974
https://docs.open.alipay.com/54/103419 使用官方的sdk
Github demo
https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
安装sdk的模块:
首先获取沙箱应用的应用id
然后获取沙箱应用的网管
from alipay import AliPay#例如
alipay_public_key_string = '''-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsLDofX93PGVStfpI4/R3mX22p7EWct0b9TutpGrj/XnukV+ZtkBUez7t6IKa13nBOuMM1RMeUw06FHAX6xhoHK/Uf4HRZmV718M/********JTodrsucEKe9OUNDcOPIjPoo/XRLcZFK8yasEDNoCj7W6UPdwBnCvTCpPLOur+lNmgPTEGQRo+5qvcNEKYKJHeZEOzwGTUzyT+fT3LIISLgAK/vKjNg9m2mMlKuT47M1nNpOnaI4sp2SV*********zQ6Lx/STg301SOmxyvVFM2Uq4hksyIw1xdVa0rDH5vBU+C/M0AfYx8rOOkDB6TyechoDOqOPAXKZ22Zk/Ms/alJxAwIDAQAB-----END PUBLIC KEY-----'''app_private_key_string = '''-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEAsLDofX93PGVStfpI4/R3mX22p7EWct0b9TutpGrj/XnukV+ZtkBUez7t6IKa13nBOuMM1RMeUw06FHAX6xhoHK/Uf4HRZmV718M/JTodrsucEKe9OUNDcOPIjPooqLim2W6m7FW/XRLcZFK8yasEDNoCj7W6UPdwBnCvTCpPLOur+lNmgPTEGQRo+5qvcNEKYKJHeZEOzwGTUzyT+fT3LIISLgAK/vKjNg9**************************7fgpC11hWYz0IyCCUL2wbZuJVS4OMmZWr+b9cH8rE97ZT44zNAceJ6Ciotck4WV/JjgCeKugoLdpmTuUW6CYAqvQhsr6ssu+jGVXUiufTjoBrzeTJGp0pluzAiyKsVMIEAw2KPICDuuc1nUcAmrHHs/YAyV45kw0H210clEbKfhWTmHj0nIV08++gos7S4QmNJc0Gn/hEvOcwmU4aU8jx4cNxzrYAO22UcSIjFnuO********nC7tS+VAPtCVnMr4dcaNKhJZPCkTdvTN8gLZSszFpx+i7yV2pGvUFhX945/iIUjJSgS/rM7zzywANM8VyFsh4GEcpkWOxlliU0KEUkCnTYIVcEx1CX6qqKgXks0UqmtmrxGo+UZ8OjKbMa0qqhxOJTrirddG4prB2E/7xZaS2I3HY36PL2xy7omYt7gBHeu0leUT7QuRuqVOCQYDxD9c0gCe10zu2BVDi699V73Gq2Gud0poR9cCgYEAxxiPC9O93MykrRBWei9+NJJyKbz/5Q404VE4696dIqmib/PjgR0g2tSdXVZaeYnmESOfH5DWaC3WMbMa1BEfp0iwP/7XBOpzCdmvqqGMz3PgM2QrVl8tblH2RLrc/dNoJluOw+aAGpZhnsVfW0gaw05+cSRsYmjCPGqcg0xYyrUCgYEAl9rkzru42ggY+EKfWUTpwB216VJLv4oxOYhyhf5E2FTXAyZfo1r6rjJdjzURqZSoYkoDG8AwXUXQIehrLWFQWxSv7sL/eYF8o8yYcnNch4lIhRJphpsx++rZaLuWhwINpSDquPNRPzJO+3s4sJYWq04DOPHSqPwLN/BxqgCNFT8CgYBotTbODo8**************************BiJZThtwWy9j3j14/Bg+XVCbhk3svmaO/tYWP+c40Fa5YWpuEGtt+8mSYKIwnI2GGaFdLHM1OO/e17PP3nZA7hgYWUp4MSyoFr9+v14r50VCddh2rQeyRJOJzgZInQKBgQCRw8QK5vxexmFVF70y9p37agvioyfeiu5SStOKPAh9+2XlfFymgZiSpl9WrSL/JQSVXJzn6WoU8yQuHK41ovjrBTuzbra/6b+kgGNi1Laqt3Xmq0im3Q9Sxf5nrHpPpQyuRu0eyQ2VIcb3r0zdxdHvu3ywTx7SaE8gW6XQGrE+xg==-----END RSA PRIVATE KEY-----'''#如果在Linux下,我们可以采用AliPay方法的app_private_key_path和alipay_public_key_path方法直接读取.emp文件来完成签证#在windows下,默认生成的txt文件,会有两个问题#1、格式不标准#2、编码不正确 windows 默认编码是gbk#实例化应用alipay = AliPay(appid="*******300566666", #支付宝app的idapp_notify_url=None, #会掉视图app_private_key_string = app_private_key_string, #私钥字符alipay_public_key_string = alipay_public_key_string, #公钥字符sign_type="RSA2", #加密方法)#发起支付order_string = alipay.api_alipay_trade_page_pay(out_trade_no="11111111", # 订单号total_amount=str(0.01), # 将Decimal类型转换为字符串交给支付宝subject="商贸商城",return_url=None,notify_url=None # 可选, 不填则使用默认notify url)# 让用户进行支付的支付宝页面网址print("https://openapi.alipaydev.com/gateway.do?"+order_string)