最近的项目需要对接支付宝,因为之前没有接触过支付宝支付的功能,折腾了好久才把问题测地解决了,现在把详细的过程贴出来让广大同学少走弯路。
目前,支付宝有两种状态,一种是用于支付的正式环境,也就是平时我们在网上购物后用户支付的环境,另外一种是用于开发的沙箱环境,所以一开始因为要测试,顾接入的是沙箱环境。具体的过程如下文字:
1、打开CMD环境(windows或linux是一样的),在命令行提示符后输入openssl命令,进入ssl环境。
2、在openssl命令行下输入命令:genrsa -out app_private_key.pem 2048,得到私钥。
3、再执行命令:rsa -in app_private_key.pem -pubout -out app_public_key.pem,得到公钥并导出公钥。
4、生成的公私钥在计算机本地,地址在C:\Users\Administrator(我的系统是windows,Linux系统可能不太一样).
5、将生成的私钥导入到项目中去。
6、再把生成的公钥复制到支付宝沙箱环境中的‘自定义秘钥’中的‘秘钥模式’下的‘应用公钥’内,并将其下的’支付宝公钥’复制出来,粘贴到本地,并在收尾加上(-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----),并将此文件保存为txt文件,文件名自取即可。
7、之后就是传参的问题了。因为蚂蚁金服没有提供对应的python SDK和API,顾需要从GitHub上找对应的支付宝的SDK(网址:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md)
8、该文档分为三块内容:一是准备,是要在python中安装(python-alipay-sdk),所以执行命令:pip install python-alipay-sdk --upgrade
9、第二模块是初始化,是用于传递支付宝沙箱环境的APP ID 和保存在本地的公私钥。代码如下:
from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig
app_private_key_string = open("/path/to/your/private/key.pem").read()#读取保存在本地的私钥
alipay_public_key_string = open("/path/to/alipay/public/key.pem").read()#读取本地的公钥
app_private_key_string == """
-----BEGIN RSA PRIVATE KEY-----
base64 encoded content
-----END RSA PRIVATE KEY-----
"""
alipay_public_key_string == """
-----BEGIN PUBLIC KEY-----
base64 encoded content
-----END PUBLIC KEY-----
"""
alipay = AliPay(
appid="",#这里需要你的支付宝沙箱的APP ID
app_notify_url=None, # 默认回调 url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA", # RSA 或者 RSA2
debug=False, # 默认 False
verbose=False, # 输出调试数据
config=AliPayConfig(timeout=15) # 可选,请求超时时间
)
dc_alipay = DCAliPay(
appid="appid",
app_notify_url="http://example.com/app_notify_url",
app_private_key_string=app_private_key_string,
app_public_key_cert_string=app_public_key_cert_string,
alipay_public_key_cert_string=alipay_public_key_cert_string,
alipay_root_cert_string=alipay_root_cert_string
)
10、文档的第三模块是接口。提供了很多的功能,比如电脑网页的支付功能,手机APP支付功能。可以根据自己的实际需求来选择对应的代码即可,如截图:
我的项目是电脑网页的支付功能。顾我选择的是第一项。将电脑网站支付的代码复制下来粘贴到项目中即可。
# 如果你是 Python2 用户(考虑考虑升级到 Python3 吧),请确保非 ascii 的字符串为 utf8 编码:
subject = u"测试订单".encode("utf8")
# 如果你是 Python3 的用户,使用默认的字符串即可
subject = "测试订单"
# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no="20161112",#这里是订单编号
total_amount=0.01,#这里是具体的金额
subject=subject,#这里是标题
return_url="https://example.com",
notify_url="https://example.com/notify" # 可选,不填则使用默认 notify url
)
到此整个后端配置完成了,后面的其实就是要传递订单编号、金额和标题整个三个参数即可。