zoukankan      html  css  js  c++  java
  • 支付宝支付

    python支付宝支付


    1.1 支付宝介绍

      1、支付宝开发网址

    支付宝开放平台: https://open.alipay.com/platform/home.htm
    支付宝沙箱环境: https://openhome.alipay.com/platform/appDaily.htm?tab=info
    支付宝开发者文档:https://openhome.alipay.com/developmentDocument.htm
    电脑网站支付流程:https://docs.open.alipay.com/270
    生成签名:https://docs.open.alipay.com/291/106103/
    python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
    

    1.2 使用python对接支付宝

       直接使用第三方SDK(python-alipay-sdk): https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

      1、登录开发者中心,熟悉"电脑网站支付"整体流程

    # 访问"支付宝开发平台"登录,可以访问开发者中心
    https://open.alipay.com/platform/home.htm
    # 可以参考"电脑网站支付" 熟悉电脑支付整体流程
    https://docs.open.alipay.com/270/105899/
    

      2、第一步:创建应用(这里使用沙箱环境测试)

        1)沙箱环境说明

    1. 线上环境需要创建应用,因为我们不是企业,没有资质,所以只能申请沙箱环境

      单来讲沙箱环境就是给开发者使用的测试环境

              3. 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

         img

    • 公钥加密、私密解密

      2、按照官方要求生成秘钥

           生成秘钥参考官网:https://docs.open.alipay.com/291/105971 

          img

     3、把生成的app公钥粘贴到沙箱环境的app中

         沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

          1)粘贴app公钥到沙箱环境中

         img

         2)支付宝公钥一会再程序中要使用

          img

    回到顶部

    1.3 使用 python-alipay-sdk 支付&查询支付结果

     1、说明

    1. 阿里官方没有提供python对接支付的sdk,但是python库中有非官方的sdk包可以使用

      python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

      1. 使用起来非常简单,只要传入几个必要的参数就可以完成

        由于支付对安全要求很高,所以要理解对接支付宝安全的流程:公钥加密、私钥解密 这八个字

     2、上代码

    # 依赖包
    pip install Crypto 
    pip install pycryptodome
    pip install python-alipay-sdk
    
    • alipay_test.py
    from alipay import AliPay
    
    # 沙箱环境中 app 私钥
    app_private_key_string = open('app_private_key.pem').read()
    # 支付宝公钥
    alipay_public_key_string = open( 'alipay_public_key.pem').read()
    
    
    def get_alipay_url():
        alipay = AliPay(
            appid="2016101800716047",  # 沙箱appid
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_string=alipay_public_key_string,
            sign_type="RSA",  # RSA 或者 RSA2
            debug=True,  # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址)
        )
        # 调用支付接口
        # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no="201611124",  # 订单id,应该从前端获取
            total_amount=str(0.01),  # 订单总金额
            subject="测试阿里云付款",  # 付款标题信息
            return_url=None,  # 付款成功回调地址(可以为空)
            notify_url=None  # 付款成功后异步通知地址(可以为空)
        )
        pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_string
        print(pay_url)  # 将这个url复制到浏览器,就会打开支付宝支付页面
    
    
    def query_pay():
        alipay = AliPay(
            appid="2016101800716047",  # 沙箱appid
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
            alipay_public_key_string=alipay_public_key_string,
            sign_type="RSA",  # RSA 或者 RSA2
            debug=True,  # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址)
        )
        trade_query = alipay.api_alipay_trade_query(
            out_trade_no=20161112,  # 上面生成支付码页面时传入的商品订单号
            trade_no=None
        )
        print(trade_query)
    
    
    if __name__ == '__main__':
        get_alipay_url()
        query_pay()
    
    
    '''
    trade_query 查询用户付款信息
    返回信息详情请看官方:https://docs.open.alipay.com/api_1/alipay.trade.query
    {
        "code": "10000",    # code=10000代表支付成功
        "msg": "Success",
        "buyer_logon_id": "foq***@sandbox.com",
        "buyer_pay_amount": "0.00",
        "buyer_user_id": "2088102180228981",
        "buyer_user_type": "PRIVATE",
        "invoice_amount": "0.00",
        "out_trade_no": "20161112",
        "point_amount": "0.00",
        "receipt_amount": "0.00",
        "send_pay_date": "2020-02-20 21:20:48",
        "total_amount": "0.01",
        "trade_no": "2020022022001428981000087565",
        "trade_status": "TRADE_SUCCESS"  
    }
    '''
    
    alipay_test.py
    
    • alipay_public_key.pem 支付宝公钥
    -----BEGIN PUBLIC KEY-----
    MIGfM*******************************f7TcZ32oWpwIDAQAB
    -----END PUBLIC KEY-----
    
    • app_private_key.pem app私钥
    -----BEGIN RSA PRIVATE KEY-----
    MIICXAIBAAKBgQCqHFH***************************
    ************************u8d+DFk=
    -----END RSA PRIVATE KEY-----
    

        img

        img

      3、支付宝支付流程


  • 相关阅读:
    codeforces 814B An express train to reveries
    codeforces 814A An abandoned sentiment from past
    codeforces 785D D. Anton and School
    codeforces 785C Anton and Fairy Tale
    codeforces 791C Bear and Different Names
    AOP详解
    Spring集成JUnit测试
    Spring整合web开发
    IOC装配Bean(注解方式)
    IOC装配Bean(XML方式)
  • 原文地址:https://www.cnblogs.com/chao460/p/13818454.html
Copyright © 2011-2022 走看看