最近的项目需要对接支付宝,因为之前没有接触过支付宝支付的功能,折腾了好久才把问题测地解决了,现在把详细的过程贴出来让广大同学少走弯路。 目前,支付宝有两种状态,一种是用于支付的正式环境,也就是平时我们在网上购物后用户支付的环境,另外一种是用于开发的沙箱环境,所以一开始因为要测试,顾接入的是沙箱环境。具体的过程如下文字: 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_notify_url=None,
app_private_key_string=app_private_key_string,
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA",
debug=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支付功能。可以根据自己的实际需求来选择对应的代码即可,如截图:
我的项目是电脑网页的支付功能。顾我选择的是第一项。将电脑网站支付的代码复制下来粘贴到项目中即可。
subject = u"测试订单".encode("utf8")
subject = "测试订单"
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"
)
到此整个后端配置完成了,后面的其实就是要传递订单编号、金额和标题整个三个参数即可。
|