• day83_11_1 阿里配python使用。


    一。环境准备。

      1。首先需要在支付包中注册开发者模式,并注册沙箱,模拟支付过程。

      https://openhome.alipay.com/platform/appDaily.htm?tab=info  

      2。然后阅读开发文档,熟悉支付宝支付流程:

      https://docs.open.alipay.com/270/105898/

      3。关于上线app的创建,需成立经营许可证/

    https://openhome.alipay.com/platform/appManage.htm#/create/1-ab6b-4f9c4e5c01f11487667522647

      4。安装生成RSA的密钥生成器

      https://docs.open.alipay.com/291/105971

      5.在github中有开源的框架,可以用作开发:

      https://github.com/fzlee/alipay

      在python中需要安装的应用:pip install python-alipay-sdk     --upgrade

      6.设置公钥私钥的模式:

    """
    # alipay_public_key.pem
    -----BEGIN PUBLIC KEY-----
    支付宝公钥
    -----END PUBLIC KEY-----
    
    # app_private_key.pem
    -----BEGIN RSA PRIVATE KEY-----
    用户私钥
    -----END RSA PRIV

      7.支付宝链接

    """
    开发:https://openapi.alipay.com/gateway.do
    沙箱:https://openapi.alipaydev.com/gateway.do
    """

    二。分析支付流程。

       1.首先前端提交订单和订单信息(订单金额,订单名字,订单支付方式)

      2.后台views接受数据,生成订单(默认未支付),通过order_string生成支付链接,返回到前端。

      3.前端接收到链接之后通过open的方式跳转,用户进行二维码支付:

    then(response =>{
      let order_url = response.data.order_url;
      window.open(order_url,'_self')
      })

      4.支付成功后,就会像前端发送支付成功页面,之后跳转到指定的页面进行渲染(自渲染)。

      5.异步调用后台请求接口,分为8次,防止造成服务器攻击。

    三。编写damo和分装:

      测试阶段:

    from alipay import AliPay
    
    
    app_private_key_string = """
    -----BEGIN RSA PRIVATE KEY-----
    
    -----END RSA PRIVATE KEY-----
    """
    alipay_public_key_string = """
    -----BEGIN PUBLIC KEY-----
    
    -----END PUBLIC KEY-----
    """
    
    alipay = AliPay(
        appid="2016101600696171",
        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
    )
    
    import time
    from luffyapi.libs.iPay import PAY_URL,alipay
    
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=str(time.time()),
        total_amount=0.01,
        subject='购买商品',
        return_url="http://localhost:8080/",
        notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url
    )
    
    order_url = PAY_URL + order_string
    
    if __name__ == '__main__':
        print(order_url)
    生成order_url

      使用应用公钥越换支付包公钥,和私钥一起配置。

      封装结构:

    libs
        ├── iPay                              # aliapy二次封装包
        │   ├── __init__.py                 # 包文件
        │   ├── keys                        # 密钥文件夹
        │   │   ├── alipay_public_key.pem      # 支付宝公钥
        │   │   └── app_private_key.pem      # 应用私钥
        └── └── settings.py                  # 应用配置  
    View Code

    import os
    # 支付宝应用id
    APP_ID = '2016093000631831'
    # 默认异步回调的地址,通常设置None就行
    APP_NOTIFY_URL = None
    # 应用私钥文件路径
    APP_PRIVATE_KEY_PATH = os.path.join(os.path.dirname(__file__), 'keys', 'app_private_key.pem')
    # 支付宝公钥文件路径
    ALIPAY_PUBLIC_KEY_PATH = os.path.join(os.path.dirname(__file__), 'keys', 'alipay_public_key.pem')
    # 签名方式
    SIGN_TYPE = 'RSA2'
    # 是否是测试环境 - 是否是支付宝沙箱
    DEBUG = True
    # 支付连接
    DEV_PAY_URL = 'https://openapi.alipaydev.com/gateway.do?'
    PROD_PAY_URL = 'https://openapi.alipay.com/gateway.do?'
    settings
    from alipay import AliPay
    from .settings import *
    # 对外提供支付对象
    alipay = AliPay(
        appid=APP_ID,
        app_notify_url=APP_NOTIFY_URL,
        app_private_key_path=APP_PRIVATE_KEY_PATH,
        alipay_public_key_path=ALIPAY_PUBLIC_KEY_PATH,
        sign_type=SIGN_TYPE,
        debug=DEBUG
    )
    
    # 对外提供的支付链接前缀
    pay_url = DEV_PAY_URL if DEBUG else PROD_PAY_URL
    __init__.py
    -----BEGIN PUBLIC KEY-----
    支付宝公钥
    -----END PUBLIC KEY-----
    alipay_public_key.pem
    -----BEGIN RSA PRIVATE KEY-----
    应用私钥
    -----END RSA PRIVATE KEY-----
    app_private_key.pem

      在dev中偶尔配置钱后端的接口和同步回调接口,异步回调接口的地址。

    # 前后台base_url
    UP_BASE_URL = 'http://127.0.0.1:8080'
    END_BASE_URL = 'http://127.0.0.1:8000'
    
    # alipay回调接口配置
    # 上线后必须换成官网地址
    # 同步回调的接口(get),前后台分离时一般设置前台页面url
    RETURN_URL = UP_BASE_URL + '/pay/success'
    # 异步回调的接口(post),一定设置为后台服务器接口
    NOTIFY_URL = END_BASE_URL + '/order/success/'
    dev.pydev.py
  • 相关阅读:
    虚拟机网络模式
    js读取json包装的map集合
    LeetCode 94:Binary Tree Inorder Traversal
    tornado+ansible+twisted+mongodb运维自己主动化系统开发(四)
    UVA
    解决request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1这个小问题
    eclipse调试web项目
    Action的mapping.findFoward(forwardName)必须要在struts-config.xml中的对应的action节点配置一个forward节点
    使用struts的时候form用struts的,不用html本身的
    eclipse的源代码编辑窗口可以拖出来单独使用的哦
  • 原文地址:https://www.cnblogs.com/LZXlzmmddtm/p/11845176.html
Copyright © 2020-2023  润新知