python使用python-alipay-sdk支付宝对接
一、获取appid和公私钥
1.可以使用系统默认的公私钥
2.也可以自己生成
使用Web在线加密 —>点击生成密钥 复制应用私钥 然后再 沙箱应用 中点击 -> 自定义密钥,选择公钥,修改就好了,它会自动生成支付宝公钥
将应用公钥复制下来,以这样的格式
public = """-----BEGIN PUBLIC KEY----- 应用公钥 -----END PUBLIC KEY----- """
然后将支付宝私钥复制下来,放到文件里以这样的格式
private = """-----BEGIN RSA PRIVATE KEY----- 支付宝私钥 -----END RSA PRIVATE KEY----- """
二,安装python-alipay-sdk并使用
pip install python-alipay-sdk
from alipay import AliPay public = """-----BEGIN PUBLIC KEY----- 应用公钥 -----END PUBLIC KEY----- """ private = """-----BEGIN RSA PRIVATE KEY----- 支付宝私钥 -----END RSA PRIVATE KEY----- """ class PaymenView(LoginLoginRequiredJSONMixin, View): """对接支付宝的支付接口""" def get(self, request, order_id): """ :param order_id:当前要支付的订单ID :return: JSON """ alipay = AliPay( # 传入公共参数(对接任何接口都要传递的) appid=APPID, # 应用ID app_notify_url=None, # 默认回调url,如果采用同步通知就不传 # 应用的私钥和支付宝公钥的路径 app_private_key_string=private, alipay_public_key_string=public, sign_type="RSA2", # 加密标准 debug=True # 指定是否是开发环境 ) # SDK对象对接支付宝支付的接口,得到登录页的地址 order_string = alipay.api_alipay_trade_page_pay( out_trade_no=20219261150100001, # 商品编号,每次提交的时候,不能相同 total_amount=str(order.total_amount), # 商品价钱 subject="美多商城%s" % order_id, # 名字 return_url=http://127.0.0.1:8000/payment/status/ # 回调地址 ) # 电脑网站支付(正式环境),需要跳转到https://openapi.alipay.com/gateway.do? + order_string # 电脑网站支付(开发环境),需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string alipay_url = 支付宝网关 + ? + order_string return http.JsonResponse({ code: RETCODE.OK, errmsg: OK, alipay_url: alipay_url})
我使用过程中出现的问题
1. from alipay import AliPay 没有AliPay
卸了,重下
2. alipay-sdk-python
这个需要C++,应该是在linux环境中使用的
3.RSA key format is not support
public = """ -----BEGIN PUBLIC KEY----- 应用公钥 -----END PUBLIC KEY----- """
这样不行
public = """-----BEGIN PUBLIC KEY----- 应用公钥 -----END PUBLIC KEY----- """
换成这样,成功了