python使用第三方支付宝SDK实现小程序发红包、用户支付等功能
支付宝官方SDK是相当的难用,而且python官方SDK不支持验签,验签功能需要自己写,因此使用了第三方SDK:python-alipay-sdk
地址:github连接
验签步骤:支付宝平台官方说明
如果需要自己实现验签:验签实现逻辑
首先安装:
pip install python-alipay-sdk --upgrade
实现小程序发红包,创建支付订单、登录验证等
第三方SDK实际上已经实现了验签逻辑,但是功能比较少,我们需要的发红包、小程序创建支付订单、登录逻辑之类的都没有,因此我们自己来扩展一下
首先在官方的验签步骤页我们应该生成了自己的密钥文件,大概是这样:
- 这里每个文件夹代表一个小程序
- 前四个文件分别对应需要的密钥文件
先看下demo创建一个支付宝web订单,之后模仿源码添加我们需要的功能即可:
from alipay import AliPay, DCAlipay
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
)
subject = "测试订单"
# Pay via Web,open this url in your browser: https://openapi.alipay.com/gateway.do? + order_string
order_string = dc_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" # this is optional
)
继承DCAlipay添加几个我们需要的功能
- 这里只使用新的验签方式,即要四个证书文件,以往使用的公钥和私钥不再使用了
- SDK里有个坑,如果不是他设定好的method将不会添加回调url,因此我们自己加上
- 同样的,登录需要的参数我们也自己添加
from alipay import DCAliPay
from alipay import compat
class CBAliPay(DCAliPay):
def api_alipay_fund_trans_uni_transfer(self, out_biz_no, trans_amount, payee_info, biz_scene=None,
product_code=None, **kwargs):
""" 商家转账给用户即发红包 """
if not product_code:
product_code = "STD_RED_PACKET"
if not biz_scene:
biz_scene = "DIRECT_TRANSFER"
biz_content = {
"out_biz_no": out_biz_no,
"trans_amount": trans_amount,
"payee_info": payee_info,
"product_code": product_code,
"biz_scene": biz_scene
}
print(biz_content)
biz_content.