zoukankan      html  css  js  c++  java
  • 支付宝接口从入坑到填坑

    官方没提供sdk开发库接口,得去git上面找大佬提供的https://github.com/fzlee/alipay

    根据组件的结构,我们只需要alipay文件夹下的所有文件即可。

    __init__文件为组件主要支持文件

    开发包引入我们需要的项目后,首先需要安装这个组件的工作依赖

    执行:  pip install python-alipay-sdk --upgrade

    支付宝在执行时会需要我们提供一个应用私钥和一个支付宝公钥,需要注意我们在使用支付宝提供的工具生成秘钥时,生成的是

    商家的应用公钥和应用私钥,设置应用公钥,支付宝平台会自动生成支付宝公钥。

    于是我们可以把应用私钥,和支付宝公钥作为配置文件存放在文件里里,让组件去加载里面的信息。

    但需要注意:python读取文件时必须含有:

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4QHlZskSN03iKt4y8oVVAQWyJUMMLhz6afGYKhTWMiN53R23Vo6xaB7oWk1Zj+qW9FdDvwkDmmlVGhFy/yUuESEOYhfESinVina/tQo95qGVE5izQAe7+PWW0eJzdteQlUh5M3NY0rMB3bNm6Neab19ytNWLAdm5EFtgtEFkPzA5FD6k4mKmyRSbiI9YmPp13IyWABocrqGC9861zyz2dDZsH4PB+NVAhMlBl6VDsyE0Jr8tCxKNddYJ+X4wHyu3mLpGGNNj76I6nP/Un2ELU7eaHwxLxqRBcglgwQtUdBb80MKKQhZckz/t5hKTnTV4ygYSJpN7QH+Ozn3TuiuHmwIDAQAB
    -----END PUBLIC KEY-----

    以及

    -----BEGIN RSA PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCM6xwUztBINap7JnFMcXmwxTqPc10axUpjABIS2qUja0DLSrS5aEg/7BUSAAjFiKyXJ11KYlBZ5cJ17AoPINVgBKlWrCEDl3FXf3cb2JOLvZs3RQEKxQd1+KHMr/DAIxG7yAwkj/BPrVW6zWIfylndIVo3cWDjOHhE04W7W2Ranq209kRt2ZPYMAm+CbdMistrDPGyEtURmLzYwocA8OquBDm9EznIX+QIOF/YJeDOCnNKf7QB4h1STEmqQHKNmCDWcwq+ZjVEVG2NW3pLDHKRjVcl9qK5jwGxQjtCzNGsLxuoAuwWuP196a7niYJUjPDyiieLOgwEiN4Ear85yvvJAgMBAAECggEASMEqImQUjPOILUTPwhPkLCvn7CA3tZaerTZgHnPcRskdDthnLkJ06uvMhRqXbMT/tpqQQ9M2gPNqzs8q8lyVTZmahDEiamRKFE6vBCVxJ/igpoxt2U2YaIQRpUhBGDIC+dxyyH24KKrpVCStwJQMiWqq1W0oBKgnEAHVTcIFsfLmDOKPdWpk/glms/xOHuj5gjS2MDBalkf4ub+hXldEFTi6u6yv1XCMua6iGpCbN+HcLCJlCyge68jurAPSf0H7FtIooRn2rYwsxz1mGFFX2BL1vt4Xo/OaWZXfBgrYMxDrW8SvJgDihQTEIUQHFislW/QzvKBAAoEbQTbs95luAQKBgQD/oL+JMP18mpktpaEMh8NO8IGcQHhXdYVBtcsmBKwILINoJiKBiBlMxkl3ozl4auSoEcMtZKCg5Tjv/2VK8Od90NJfBwlyPnbNk3k7k5nDuV5VcuHhFr5oMRjxSij08PDjXZOuiWqXaI9/IkyQcKF7tx8CA9n5eSpgLl/CsQ++8QKBgQCNH55Z+HrtI/+Yt9CbT1U85qjOu8poQP5VkQCOLzKtkjPb0M8KP9liIMTnG7GAUnbW42dipjw8FhlaqLBAjmblmIxOuMPfJDqTwQg++dnCeY7ttjMPwt6nn++5EdXmu/X+Fq70HLHujtX8hM485bA8UCMm2qkvPmZ3xAzBaP86WQKBgQD5rP1HN3VvHeUdQ5ggj/4AfUJq5kFkUyHbw39vW8LXnPqgYBb144OqjEW3t9JrPiSlz+uNy6pkXF8XcqFx6AiCx9KiBFKCpmYNdsxDl2/pToXH+hSLcFZ7l/Dfw+prC2aM/JpBMHDO/86gg1S7A3eGSZ7crfxaAbGVDdZ0Z9KUUQKBgERMKhG2zJ8Zzeg2BXI0mbboloe+oH2F/tCgZVlqhCc2W3yleJ2oOudfnouOfn/w6Oykj3NRqlMWCt0ySGJlyGyTQEwU5U6HtQWu5PO9bWLN+5sVk26sS59qKtUxSYjqLGn0xmUDwiUG4Y7dIwabzofR7MEwD7L6ixKpQdcUnni5AoGAJJ9M9rlP/enRAdXAEiZhFHii9l2DmMGN3HCEGtQ187QY3kmiHT6mh6/KWwUF10cV9RJgGwqs6JFrr/324u8P+Lzq5xoO+cNioEx/utv3SlMn/YVsh3y6X6/B5QlNc1Kl6BqaaBZ5bFq7vWzkkozFuAIlC42ztqakQoN3wtxFS5k=
    -----END RSA PRIVATE KEY-----

    红色标识部分不能缺失,否则加载不了秘钥。私钥还多一个RSA

    我么实例化的这个对象是 AliPay下的对象,相当于他执行了父类的init 初始化方法

    那么首先我们需要实例化一个支付宝对象,并初始化配置

    from alipay import AliPay
    alipay
    = AliPay( appid=settings.ALIPAY_APPID, #商家的id 模拟时是沙箱id app_notify_url=None, #如果支付成功 会向改地址发送post请求 app_private_key_path="keys/app_private_2048.txt", #应用私钥 alipay_public_key_path="keys/alipay_public_2048.txt", #支付宝公钥 sign_type="RSA2", #加密方式可以不指定 默认为它 debug=True, #是否为调试模式 ,默认为false )

    至此我们可以用该对象执行相应的方法了

    如果我们想执行商品的支付,则需要将商品相关的信息以键值的形式拼接成url交给支付宝接口处理,支付宝会对链接进行加密处理

    这个支付订单会有多种支付的可能,手机支付,条码支付,页面扫码支付,等

    以网站页面扫码支付为例子:可以调用接口的方法

    #实例化一个订单对象  对数据进行加密处理
        order_string=alipay.api_alipay_trade_page_pay(
            out_trade_no="sa"+str(time.time()),    #订单号
            total_amount=price,          #商品金额(保留两位有效数字)
            subject=wares,               #商品描述
            return_url="http://127.0.0.1:8000/change/",   #支付成功会重定向到这个链接地址
            notify_url=None
        )

    这样,我们就通过支付宝的接口将商品信息拼接并加密了,要实现支付跳转再用支付宝官方支付链接拼接上一步的order_string

    pay=settings.ALIPAY_URL+'?'+order_string
        return redirect(pay)

    settings里面的配置如下:

    # 支付宝配置参数
    ALIPAY_APPID = "2016092300576152"
    ALIPAY_URL = "https://openapi.alipaydev.com/gateway.do"

    这样测试接口是否能正常调用了

    app_notify_url支付宝再支付成功的情况下会给该地址发送post请求 但是这个地址必须为公网IP才能收到数据

     特别注意应用私钥别弄成公钥了,否则支付完成,订单状态会一直是false

  • 相关阅读:
    Flutter图片选择 image_picker(官方)插件使用详解
    androidstudo如何跨越这个厚厚的墙,亲测有效 Could not resolve com.android.tools.build:gradle:
    qwq。。胡诌qwq
    关于很狗的军训qwq
    Leetcode每日一题 503.下一个更大元素II
    C++ 关于volatlie
    C++虚成员函数与动态联编
    graphics pipeline
    pointer or function
    线段树
  • 原文地址:https://www.cnblogs.com/wen-kang/p/10060741.html
Copyright © 2011-2022 走看看