python对接支付宝PC端支付

 

支付宝开发平台登录    

        https://open.alipay.com/platform/home.htm

        沙箱环境

                沙箱环境是支付宝提供给开发者的虚拟环境,与真实环境是分开的

                

支付宝开发者文档


接入步骤

1.创建应用
2.配置秘钥
3. 调用接口
4.搭建开发环境


openssl
OpenSSL> genrsa -out app_private_key.pem 2048  # 私钥RSA2
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
OpenSSL> exit 
  将生成的公钥添加到支付宝中

在应用中创建alipay_public_key.pem文件用来添加支付宝公钥
并创建app_private_key.pem将私钥添加到app_private_key.pem中

 



  

    PC网站支付流程

            官方文档图片:

            

    1.客户端发起支付请求流程(下单)

1.1首先用户发送请求到商户系统,

1.2 商户系统接收用户请求后向支付宝发请请求获取参数

1.3 支付宝返回参数

1.4 商户拼接好参数之后生成访问支付宝的url返回给用户

class PaymentView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self,request,order_id):
        try:
            order = OrderInfo.objects.get(order_id=order_id,
                                          user=request.user,
                                          pay_method=OrderInfo.PAY_METHODS_ENUM['ALIPAY'],
                                          status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'],
                                          )
        except OrderInfo.DoesNotExist:
            return Response({'message': '订单信息有误'}, status=status.HTTP_400_BAD_REQUEST)

        # 向支付宝发送请求,获取需要拼接支付网页的数据
        alipay_clie = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                                "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False
        )

        order_string = alipay_clie.api_alipay_trade_page_pay(
            out_trade_no = order_id,
            total_amount = str(order.total_amount),
            return_url = 'http://www.xiaoxin.site:8080/pay_success.html',
            notify_url=None,
            subject = '商城订单%s' % order_id,  # 支付页面的订单标题

        )
        # 拼接支付宝支付页面网址url
        alipay_url = settings.ALIPAY_URL + "?" + order_string

        # 返回
        return Response({'alipay_url': alipay_url})

2.用户登录,进行支付。(无需考虑)

3.用户付款之后,支付宝分为三种方式告知商户

3.1 支付宝通过get请求returnURL将用户重定向到商户页面

3.2 支付宝通过post请求notifyUrl,主动告知商户

3.3 商户通信息过alipay.trade.query主动查看交易状态,支付宝返回交易

                        

  以下通过第三种方法演示:

class PaymentStatusView(APIView):

    def put(self,request):
        # 获取请求参数
        alipay_req_data = request.query_params
        if not alipay_req_data:
            return Response({'message': "缺少参数"}, status=status.HTTP_400_BAD_REQUEST)
        alipay_req_dict = alipay_req_data.dict()
        signature = alipay_req_dict.pop('sign')
        # 向支付宝发起连接请求
        alipay_clie = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                                "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=settings.ALIPAY_DEBUG  # 默认False
        )
        # 校验参数
        result = alipay_clie.verify(alipay_req_dict,signature)
        # 获取订单编号,支付流水号
        if result:
            # 订单编号
            order_id = alipay_req_dict.get('out_trade_no')
            # 支付宝支付流水号
            trade_id = alipay_req_dict.get('trade_no')
        # 保存支付流水号以及订单编号
            Payment.objects.create(
                order_id=order_id,
                trade_id=trade_id
            )
        # 修改订单状态
            OrderInfo.object.filter(order_id=order_id).update(status=OrderInfo.ORDER_STATUS_ENUM['UNSEND'])
            return Response({'trade_id': trade_id})
        else:
            return Response({'message': "请求参数有误"}, status=status.HTTP_400_BAD_REQUEST)

成功页面:


搭建开发环境
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值