使用第三方包来完成支付宝sdk调用:
安装
# 安装python-alipay-sdk
pip install python-alipay-sdk --upgrade
# 对于python2, 请安装2.0以下版本:
pip install python-alipay-sdk==1.1
生成密钥文件
openssl
OpenSSL> genrsa -out app_private_key.pem 2048 # 私钥 OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥 OpenSSL> exit
在支付宝上下载的公钥是一个字符串,你需要在文本的首尾添加标记位,若已有则不需要再添加
-----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY-----
实例:
def test(request): # 获取前端传来的订单id order_id = request.GET.get('order_id') data = { 'order_id': order_id } # 将订单id作为json格式返回 return JsonResponse(data=data) def alipay(request): # 获取订单id order_id = request.GET.get('order_id') # 在数据库中根据订单id查找对应的订单对象 order = Order.objects.get(id=order_id) # 订单价格 order_price = order.o_price # 订单商品 order_goods = OrderGoods.objects.filter(o_order_id=order_id) # 获取订单商品名字和数量,存在列表中 order_goods_list = [] for good in order_goods: order_goods_list.append('{}*{}'.format(good.o_goods.prodectlongname, good.o_goods_num)) # 创建alipei对象 alipay_client = AliPay( appid=ALIPAY_APPID, # 在settings中创建的支付宝appid,需要在支付宝官网生成应用之后获取appid app_notify_url=None, # 定义默认回调url app_private_key_string=APP_PRIVATE_KEY, # 在支付宝官网根据文档操作生成的应用私钥 alipay_public_key_string=ALIPAY_PUBLIC_KEY, # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥, sign_type="RSA2", # RSA 或者 RSA2 debug=False, # 默认False verbose=False, # 输出调试数据 config=AliPayConfig(timeout=15), # 可选, 请求超时时间 ) subject = str(order_goods_list) # 传给支付宝的订单信息 order_string = alipay_client.api_alipay_trade_page_pay( out_trade_no=order_id, # 订单id total_amount=order_price, # 订单金额 subject=subject, # 订单明细 return_url="https://opendocs.alipay.com/", # 支付完成后的跳转页面 notify_url="https://opendocs.alipay.com/" # 可选, 不填则使用默认notify url ) # 将订单信息发送给支付宝生成交易订单 return redirect('https://openapi.alipaydev.com/gateway.do?' + order_string)
$(function () { # 在html页面的支付按钮上添加点击事件 $("#alipay").click(function () { console.log('pay') var order_id = $(this).attr('order_id') # 调用test函数获取订单id $.getJSON('/axf/test/', {"order_id": order_id}, function (data) { # 将订单id作为路由参数传给服务器,生成支付宝订单 window.open('/axf/alipay/?order_id=' + data['order_id']) # 获取订单支付状态 $.getJSON('/axf/payed', {"order_id": order_id}, function (data) { console.log(data) window.open('/axf/mine_icon/',target="_self") }) }) }) })