Django支付宝在线支付

Django支付

使用python工具包

# 从 1.3.0升级上来的用户, 请先卸载pycrypto:
pip uninstall pycrypto
# 安装python-alipay-sdk
pip install python-alipay-sdk --upgrade

查看开发者文档:https://openhome.alipay.com/developmentDocument.htm

登录蚂蚁金服开发者平台 创建沙箱应用,获得应用公钥与私钥,将文件放到应用目录下

详细可参考: https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

应用实例代码参考:
def order(request):
    if request.method == "POST":
        order_id = request.POST.get("order")
        order = Order_info.objects.get(pk=order_id)
        price = str(order.total)
		
        # 手机版
        app_private_key_string = open(os.path.join(BASE_DIR, 'apps/utils/alipay/ying_yong_si_yao.txt')).read()
        alipay_public_key_string = open(os.path.join(BASE_DIR, 'apps/utils/alipay/ying_yong_gong_yao.txt')).read()

        alipay = AliPay(
            appid="2016092400584100",
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_string=alipay_public_key_string,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False
        )

        order_string = alipay.api_alipay_trade_wap_pay(
            out_trade_no=order.ordernum,
            total_amount=price,
            subject="超市支付",
            return_url="http://127.0.0.1:8000/cart/pay/",
            notify_url=None  # 可选, 不填则使用默认notify url
        )
        re_url = "https://openapi.alipaydev.com/gateway.do?{data}".format(data=order_string)

        return JsonResponse({"code": 0, "url": re_url})
    else:
        ordernum = request.GET.get("ordernum")
        order = Order_info.objects.get(ordernum=ordernum)
        context = {
            "order": order
        }
        return render(request, 'cart/order.html', context)

def pay(request):
    
    # 手机版
    app_private_key_string = open(os.path.join(BASE_DIR, 'apps/utils/alipay/ying_yong_si_yao.txt')).read()
    alipay_public_key_string = open(os.path.join(BASE_DIR, 'apps/utils/alipay/ying_yong_gong_yao.txt')).read()

    alipay = AliPay(
        appid="2016092400584100",
        app_notify_url=None,  # 默认回调url
        app_private_key_string=app_private_key_string,
        # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=True  # 默认False
    )
    out_trade_no = request.GET.get("out_trade_no")
    paid = False
    for i in range(3):
        result = alipay.api_alipay_trade_query(out_trade_no=out_trade_no)
        if result.get("trade_status", "") == "TRADE_SUCCESS":
            paid = True
            break
        else:
            time.sleep(3)

    if paid is False:
        context = {
            "mess": "支付失败"
        }
    else:
        context = {
            "mess": "支付成功"
        }
        Order_info.objects.filter(ordernum=out_trade_no, order_status=0).update(order_status=1)
    return render(request, 'cart/pay.html', context)

猜你喜欢

转载自blog.csdn.net/weixin_43958804/article/details/86293884