精华内容
下载资源
问答
  • 微信支付商户平台,企业向个人付款接口demo

    千次下载 热门讨论 2015-09-15 00:09:18
    微信支付商户平台,企业向个人付款接口demo
  • 支付宝标准付款接口文档2.0,包括支付宝标准付款接口,最新。
  • 支付宝快速付款接口案例下载支付宝快速付款接口案例下载支付宝快速付款接口案例下载
  • 《标准快速付款接口文档》介绍支付宝标准接口的相关内容
  • 这个是精秀特群网络推出的微信秒到账付款接口 ,本来想免费分享出来的。可是最低只能设置2分
  • 支付宝批量付款接口接口文档:https://docs.open.alipay.com/64/103569demo地址:http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo/alipaytranspay.zip证书相关:首先就要安装证书,筒子们啊!...

     

     

     

    支付宝批量付款接口

    接口文档:https://docs.open.alipay.com/64/103569
    demo地址:http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo/alipaytranspay.zip
    证书相关:首先就要安装证书,筒子们啊!否则你就会受到一个“证书有误,无法复核批次记录”的大大错误!这个是支付宝的校检证书链接:https://110.alipay.com/sc/index.htm,点击进入自主安装,证书名称:数字证书。
    环境要求:数字证书目前支持的系统版本为Windows XP sp3到Windows 8.1(linux不支持),支持的浏览器版本为IE 8到IE 10 32位版本 或者UC浏览器(最新版本) 。

    相关参考文档:
    http://blog.csdn.net/u014799292/article/details/52414502
    http://blog.csdn.net/jbk3311/article/details/52299902

     

     

    https://docs.open.alipay.com/66/104422/

    证书及支持浏览器参照如上

     

     

     

    如何查看批量退款或者付款的交易记录呢?

    图一

    图二,在图一常用功能里搜索“批量退款”即可查询到批量退款的记录

     

    图三,在图一右下角会有批量付款的按钮,点击第一个就阔以。(别问我为啥不能像查询批量退款那样操作,我也母鸡啊)

     

    转载于:https://www.cnblogs.com/hedongfei/p/8320097.html

    展开全文
  • 支付宝标准快速付款接口文档_V2.0.pdf
  • 微信支付商户平台,企业向个人付款接口-php版,已封装好,可以直接使用
  • 建行付款接口打包.rar

    2020-07-06 11:01:37
    聚合动态二维码接口开发参考, 查询订单API, 建行,微信,支付宝,二维码扫码付款,银行转账,订单查询
  • AliPay支付宝标准快速付款接口文档 V1.4
  • Opencart支付宝付款接口(直接到账、担保交易、双接口) Opencart支付宝付款接口(直接到账、担保交易、双接口) ================ 重要说明:现在支付宝只有企业才能申请即时到帐 所以本站只能使用担保交易 并在...

    如果在使用OpenCart过程中遇到什么问题或者有什么建议可以联系QQ号:1487063622    微信号:18561800618

    下载地址: Opencart支付宝付款接口(直接到账、担保交易、双接口)
    Opencart支付宝付款接口(直接到账、担保交易、双接口)
    ================
    重要说明:现在支付宝只有企业才能申请即时到帐 所以本站只能使用担保交易 并在1.5.5.1下测试通过
    如有其他问题请向 OpenCart中国网站 获取帮助
    或加入 OpenCart中国QQ交流群:282797742, 

    安装说明:
    1.解压后,覆盖你网站的根目录;

    2.在系统货币代码中添加CNY(System->Localisation->Currencies->Insert)
    Currency Title: 人民币
    Code: CNY
    Symbol Left: ¥
    status: Enabled

    3.在付款模块编辑“支付宝”信息(Extensions->payment->alipay)
    依次填写Trade Type,Security Code,和Seller E-Mail

    注意:
    1.汇率设置错误会导致支付金额错误,务必认真设置。
    2.请勿随意修改程序,将可能出现掉单情况
    3.接口安装后,如额外添加其它组件或者模块,请重新检测交易数据是否正常

    说明
    ================
    支付宝插件,支持三种模式:直接到帐,担保交易,和直接到帐/担保交易 双接口


    安装说明
    ==================
    1)解压上传到网站空间。
    2)安装前确保网站已经安装了人民币汇率的设置(代码为 CNY)
    3)安装界面请看截图。

    展开全文
  • AliPay支付宝标准快速付款接口文档(AliPay支付宝标准快速付款专用纯网关)
  • AliPay支付宝标准快速付款接口文档(专用纯网关)V1.5.1
  • 企业微信付款接口

    千次阅读 2017-07-13 09:47:33
    企业付款 简介 企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款的功能。 比如目前的保险行业向客户退保、...

    企业付款

    简介

    企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款的功能。
    比如目前的保险行业向客户退保、给付、理赔。

    企业付款将使用商户的可用余额,需确保可用余额充足。查看可用余额、充值、提现请登录商户平台“资金管理”进行操作。https://pay.weixin.qq.com/
    注意:与商户微信支付收款资金并非同一账户,需要单独充值。

    企业付款

    接口介绍

    业务流程 接口 简介
    付款 企业付款 用于企业向微信用户个人付款
    目前支持向指定微信用户的openid付款。(获取openid参见微信公众平台开发者文档: 网页授权获取用户基本信息
    接口调用规则:

    ◆ 给同一个实名用户付款,单笔单日限额2W/2W

    ◆ 不支持给非实名用户打款

    ◆ 一个商户同一日付款总额限额100W

    ◆ 单笔最小金额默认为1元

    ◆ 每个用户每天最多可付款10次,可以在商户平台--API安全进行设置

    ◆ 给同一个用户付款时间间隔不得低于15秒

    注意1-当返回错误码为“SYSTEMERROR”时,一定要使用原单号重试,否则可能造成重复支付等资金风险。

    注意2-新申请商户号使用企业付款需要满足两个条件:1、入驻时间超过90天 2、连续正常交易30天。

    接口地址

    接口链接:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers

    是否需要证书

    请求需要双向证书。 详见证书使用

    请求参数

    字段名 变量名 必填 示例值 类型 描述
    商户账号appid mch_appid wx8888888888888888 String 微信分配的账号ID(企业号corpid即为此appId)
    商户号 mchid 1900000109 String(32) 微信支付分配的商户号
    设备号 device_info 013467007045764 String(32) 微信支付分配的终端设备号
    随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
    签名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 签名,详见签名算法
    商户订单号 partner_trade_no 10000098201411111234567890 String 商户订单号,需保持唯一性
    (只能是字母或者数字,不能包含有符号)
    用户openid openid oxTWIuGaIt6gTKsQRLau2M0yL16E String 商户appid下,某用户的openid
    校验用户姓名选项 check_name FORCE_CHECK String NO_CHECK:不校验真实姓名
    FORCE_CHECK:强校验真实姓名
    收款用户姓名 re_user_name 可选 马花花 String 收款用户真实姓名。
    如果check_name设置为FORCE_CHECK,则必填用户真实姓名
    金额 amount 10099 int 企业付款金额,单位为分
    企业付款描述信息 desc 理赔 String 企业付款操作说明信息。必填。
    Ip地址 spbill_create_ip 192.168.0.1 String(32) 调用接口的机器Ip地址

    数据示例:

    <xml>

    <mch_appid>wxe062425f740c30d8</mch_appid>

    <mchid>10000098</mchid>

    <nonce_str>3PG2J4ILTKCH16CQ2502SI8ZNMTM67VS</nonce_str>

    <partner_trade_no>100000982014120919616</partner_trade_no>

    <openid>ohO4Gt7wVPxIT1A9GjFaMYMiZY1s</openid>

    <check_name>FORCE_CHECK</check_name>

    <re_user_name>张三</re_user_name>

    <amount>100</amount>

    <desc>节日快乐!</desc>

    <spbill_create_ip>10.2.3.10</spbill_create_ip>

    <sign>C97BDBACF37622775366F38B629F45E3</sign>

    </xml>

    返回参数

    字段名 变量名 必填 示例值 类型 描述
    返回状态码 return_code SUCCESS String(16) SUCCESS/FAIL
    此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
    返回信息 return_msg 签名失败 String(128) 返回信息,如非空,为错误原因
    签名失败
    参数格式校验错误

    以下字段在return_code为SUCCESS的时候有返回

    字段名 变量名 必填 示例值 类型 描述
    商户appid mch_appid wx8888888888888888 String 微信分配的公众账号ID(企业号corpid即为此appId)
    商户号 mchid 1900000109 String(32) 微信支付分配的商户号
    设备号 device_info 013467007045764 String(32) 微信支付分配的终端设备号,
    随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
    业务结果 result_code SUCCESS String(16) SUCCESS/FAIL
    错误代码 err_code SYSTEMERROR String(32) 错误码信息
    错误代码描述 err_code_des 系统错误 String(128) 结果信息描述

    以下字段在return_code 和result_code都为SUCCESS的时候有返回

    成功示例:

    <xml>

    <return_code><![CDATA[SUCCESS]]></return_code>

    <return_msg><![CDATA[]]></return_msg>

    <mch_appid><![CDATA[wxec38b8ff840bd989]]></mch_appid>

    <mchid><![CDATA[10013274]]></mchid>

    <device_info><![CDATA[]]></device_info>

    <nonce_str><![CDATA[lxuDzMnRjpcXzxLx0q]]></nonce_str>

    <result_code><![CDATA[SUCCESS]]></result_code>

    <partner_trade_no><![CDATA[10013574201505191526582441]]></partner_trade_no>

    <payment_no><![CDATA[1000018301201505190181489473]]></payment_no>

    <payment_time><![CDATA[2015-05-19 15:26:59]]></payment_time>

    </xml>

    错误示例:

    <xml>

    <return_code><![CDATA[FAIL]]></return_code>

    <return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg>

    <result_code><![CDATA[FAIL]]></result_code>

    <err_code><![CDATA[SYSTEMERROR]]></err_code>

    <err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des>

    </xml>

    错误码

    错误代码 描述 原因 解决方案
    NOAUTH 没有权限 没有授权请求此api 请联系微信支付开通api权限
    AMOUNT_LIMIT 付款金额不能小于最低限额 付款金额不能小于最低限额 每次付款金额必须大于1元
    PARAM_ERROR 参数错误 参数缺失,或参数格式出错,参数不合法等 请查看err_code_des,修改设置错误的参数
    OPENID_ERROR Openid错误 Openid格式错误或者不属于商家公众账号 请核对商户自身公众号appid和用户在此公众号下的openid。
    NOTENOUGH 余额不足 帐号余额不足 请用户充值或更换支付卡后再支付
    SYSTEMERROR 系统繁忙,请稍后再试。 系统错误,请重试 请使用原单号以及原请求参数重试,否则可能造成重复支付等资金风险
    NAME_MISMATCH 姓名校验出错 请求参数里填写了需要检验姓名,但是输入了错误的姓名 填写正确的用户姓名
    SIGN_ERROR 签名错误 没有按照文档要求进行签名
    1. 签名前没有按照要求进行排序。
    2. 没有使用商户平台设置的密钥进行签名
    3. 参数有空格或者进行了encode后进行签名。
    XML_ERROR Post内容出错 Post请求数据不是合法的xml格式内容 修改post的内容
    FATAL_ERROR 两次请求参数不一致 两次请求商户单号一样,但是参数不一致 如果想重试前一次的请求,请用原参数重试,如果重新发送,请更换单号。
    CA_ERROR 证书出错 请求没带证书或者带上了错误的证书
    1. 到商户平台下载证书
    2. 请求的时候带上该证书
    V2_ACCOUNT_SIMPLE_BAN 无法给非实名用户付款 用户微信支付账户未知名,无法付款 引导用户在微信支付内进行绑卡实名
    展开全文
  • 纯网关接口 即时到账交易接口(create_direct_pay_by_user)接入与使用规则
  • 企业付款简单接口实际运用,实际代码只需要两条命令即可实现功能请求
  • 我们在开发的过程中经常会碰到调用微信或者支付宝接口进行付款付款完成之后,如果用户绑定了我的账号,我只要有活动了,就要给这个关注我的用户推动消息,让用户知道,比如说,我们经常会关注一些公众号,然后这些...

      我们在开发的过程中经常会碰到调用微信或者支付宝接口进行付款,付款完成之后,如果用户绑定了我的账号,我只要有活动了,就要给这个关注我的用户推动消息,让用户知道,比如说,我们经常会关注一些公众号,然后这些公众号只要有了消息就会自动给我推送,我们以后也会遇到这种推送的需求,那么具体如何使用我们的代码来实现这种需求呢?还有就是用户在付款的时候,我如何给他调用支付宝的接口呢?下面我们就来具体的学习

    一、支付宝付款

      目前我们的付款方式有支付宝支付,微信支付,银联支付,然后使用支付宝支付需要有一个商户号,这个需要自己公司去申请(需要企业营业执照),申请完之后会有一个商户号,我们这边主要是使用一种沙箱测试环境,沙箱环境地址如下

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

     进入以后,我们就可以申请个人的商户号了,如下图所示

    第一步、进入沙箱测试环境

    第二步、生成商户公钥和支付宝公钥

    第三步、下载沙箱测试应用

    我们在使用的时候,调用支付宝接口和支付宝返回给我们数据的时候,传输过程中数据都是加密的,那么简单的复习一下加密方式

    对称加密:所谓的对称加密就是指加密密钥和解密密钥使用的是同一个,这样只要我们保证了这个私钥不泄露,数据就是安全的

    非对称加密:加密和解密的密钥是不同的,使用公钥加密,然后使用私钥进行解密,公钥可以随意分发给任何人,但是私钥一定不能泄露,比如支付宝的公钥就是公开的,用户使用支付宝的公钥进行数据的加密,传输给支付宝,然后支付宝通过自己的私钥进行解密,这样就可以达到数据的传输,而且在传输的过程中,就算被别人截取了,他由于不知道支付宝的私钥,所以对于我们来说这个数据也是安全的。

      我们在使用加密的时候,需要使用第三方的模块,安装如下

    pip3 install pycryptodome

    二、支付宝支付流程

    1、项目结构

     2、项目流程介绍

      1.拿到商户号,回调地址,支付宝公钥,商户私钥生成一个alipay对象

      2.对象点direct_pay,传支付金额,支付商品描述,支付订单号,然后返回一个加密的串,这个加密串包含了第一步的信息

      3.将拿到的串拼接到支付宝网关(测试/正式)的后面pay_url="https://openapi.alipaydev.com/gateway.do?{}".format(query_params)

      4.向生成的地址发送get请求,会跳转到支付宝的支付页面

      5.用户付款完成(此时钱已经进入了商户号),支付宝收到付款,向我们配置的两个回调地址发送请求(get,post)

      6.一般get请求用户展示,post请求用于修改订单状态,我们在拿到请求的时候一定要验签(防止仿造支付宝向我们发送请求)

        -get请求一般用于页面展示

        -post请求用于修改订单状态

    项目中需要配置的东西如下:

      1.公钥私钥生成方式:https://docs.open.alipay.com/291/105971

        支付宝公钥:商户号中输入的应用公钥,会自动生成一个支付宝公钥,直接黏贴过来就好

        应用私钥(用户私钥)

      2.支付宝回调返回数据中会有

        singn:必须验证签名,验证通过以后才能进行后续的修改

        订单id:根据订单id修改订单状态

     可能遇到的问题处理:

      用户付款了,但正在这时,服务挂掉,收不到支付宝的回调数据,如何处理?

        如果服务挂掉了,支付宝会过一段时间自动在回调,在24h内,隔一段时间就会回调,这个时候我们只需要重启服务,就可以 接收到了!

    3、代码展示

      首先是路由层,我们需要用到的是两个接口,一个用来向支付宝发起付款,一个用来接收支付宝收款成功之后返回给我们数据的接口,这里我们使用的是page1,page2

    复制代码
    from django.contrib import admin
    
    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url('admin/', admin.site.urls),
        url(r'^page1/', views.page1),
        url(r'^page2/', views.page2),
    ]
    复制代码

    视图函数展示

    复制代码
    import json
    import time
    
    
    from django.shortcuts import render, redirect, HttpResponse
    
    
    from myutils.pay import AliPay
    
    
    def ali():
        # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
        app_id = "2016101000653326"
        # 支付宝收到用户的支付,会向商户发两个请求,一个get请求,一个post请求
        # POST请求,用于最后的检测
        notify_url = "http://127.0.0.1/page2/"
        # GET请求,用于页面的跳转展示
        return_url = "http://127.0.0.1/page2/"
        # 用户私钥
        merchant_private_key_path = "keys/app_private_2048.txt"
        # 支付宝公钥
        alipay_public_key_path = "keys/alipay_public_2048.txt"
        # 生成一个AliPay的对象,支付对象
        alipay = AliPay(
            appid=app_id,  # 商家的商户号
            app_notify_url=notify_url,  #
            return_url=return_url,
            # 商家私钥
            app_private_key_path=merchant_private_key_path,
            # 支付宝公钥  用于验证支付宝发送的消息的校验
            alipay_public_key_path=alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
            debug=True,  # 默认False,  是True的时候才会走沙箱环境,否则就是走的真正的支付接口
        )
        # 将阿里pay对象返回
        return alipay
    
    
    def page1(request):
        if request.method == "GET":
            # get请求的话直接返回一个页面
            return render(request, 'page1.html')
        # 是post请求,那就要开始调用支付宝的接口
        else:
            money = float(request.POST.get('money'))
            # 这里是调用ali这个函数,开始执行内部的代码,然后将返回值接收
            alipay = ali()
            # 调用对象的direct_pay这个方法,将商品相关传进去,得到一个签名后的字符串
            query_params = alipay.direct_pay(
                subject="充气娃娃",  # 商品简单描述
                out_trade_no="x2" + str(time.time()),  # 商户订单号
                total_amount=money,  # 交易金额(单位: 元 保留俩位小数)
            )
    
            pay_url = "https://openapi.alipaydev.com/gateway.do?{}".format(query_params)
            print(pay_url)
            # 朝这个地址发get请求
            # from django.http import JsonResponse
            # return JsonResponse({'status':100,'url':pay_url})
            return redirect(pay_url)
    
    
    def page2(request):
        # 支付宝如果收到用户的支付,支付宝会给我的地址发一个post请求,一个get请求
        alipay = ali()
        if request.method == "POST":
            # 检测是否支付成功
            # 去请求体中获取所有返回的数据:状态/订单号
            from urllib.parse import parse_qs
            body_str = request.body.decode('utf-8')
            print(body_str)
    
            post_data = parse_qs(body_str)
            print('支付宝给我的数据:::---------',post_data)
            post_dict = {}
            for k, v in post_data.items():
                post_dict[k] = v[0]
            print('转完之后的字典',post_dict)
            # 做二次验证
            sign = post_dict.pop('sign', None)
            # 通过调用alipay的verify方法去认证
            status = alipay.verify(post_dict, sign)
    
            print('POST验证', status)
            if status:
                # 修改自己订单状态
                pass
            return HttpResponse('POST返回')
    
        else:
            params = request.GET
            sign = params.pop('sign', None)
            status = alipay.verify(params, sign)
            print('GET验证', status)
            return HttpResponse('支付成功')
    复制代码
    Views

    在这里我们用到了alipay对象,现在展示alipay对象的代码,它里面做的具体操作如下

    复制代码
    from datetime import datetime
    from Crypto.PublicKey import RSA
    from Crypto.Signature import PKCS1_v1_5
    from Crypto.Hash import SHA256
    from urllib.parse import quote_plus
    from base64 import decodebytes, encodebytes
    import json
    
    # 这是alipay对象
    class AliPay(object):
        """
        支付宝支付接口(PC端支付接口)
        """
        def __init__(self, appid, app_notify_url, app_private_key_path,
                     alipay_public_key_path, return_url, debug=False):
            self.appid = appid
            self.app_notify_url = app_notify_url
            self.app_private_key_path = app_private_key_path
            self.app_private_key = None  # 商家的私钥
            self.return_url = return_url  # 回来后的get请求地址
            with open(self.app_private_key_path) as fp:
                self.app_private_key = RSA.importKey(fp.read())
            self.alipay_public_key_path = alipay_public_key_path
            with open(self.alipay_public_key_path) as fp:
                self.alipay_public_key = RSA.importKey(fp.read())
    
            if debug is True:
                # 这里是调用它测试的接口
                self.__gateway = "https://openapi.alipaydev.com/gateway.do"
            else:
                # 这才是真正的支付接口
                self.__gateway = "https://openapi.alipay.com/gateway.do"
    
        def direct_pay(self, subject, out_trade_no, total_amount, return_url=None, **kwargs):
            biz_content = {
                "subject": subject,  # 商品
                "out_trade_no": out_trade_no,  # 订单号
                "total_amount": total_amount,  # 总金额
                "product_code": "FAST_INSTANT_TRADE_PAY",
                # "qr_pay_mode":4
            }
    
            biz_content.update(kwargs)
            # data
            data = self.build_body("alipay.trade.page.pay", biz_content, self.return_url)
            return self.sign_data(data)  # 签名后的字符串
    
    
        # 这个是用来创建请求的体,返回的data里面包含了请求方式,请求体,版本号
        def build_body(self, method, biz_content, return_url=None):
            data = {
                "app_id": self.appid,
                "method": method,
                "charset": "utf-8",
                "sign_type": "RSA2",  # 这是修改密钥的种类
                "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                "version": "1.0",
                "biz_content": biz_content
            }
    
            if return_url is not None:
                data["notify_url"] = self.app_notify_url
                data["return_url"] = self.return_url
    
            return data
    
        def sign_data(self, data):
            data.pop("sign", None)
            # 排序后的字符串
            unsigned_items = self.ordered_data(data)  # 这里就是拿到排序后的列表套元组[(),(),()]
            # "{k}={v}&{}={}" name = egon & age = 18 拼接成urlencoded形式的编码
            unsigned_string = "&".join("{0}={1}".format(k, v) for k, v in unsigned_items)
            sign = self.sign(unsigned_string.encode("utf-8"))
            # ordered_items = self.ordered_data(data)
            quoted_string = "&".join("{0}={1}".format(k, quote_plus(v)) for k, v in unsigned_items)
    
            # 获得最终的订单信息字符串 签过名的字符串信息,利用商家的私钥签名
            signed_string = quoted_string + "&sign=" + quote_plus(sign)
            return signed_string
    
        def ordered_data(self, data):
            complex_keys = []
            # 对data进行取值
            for key, value in data.items():
                # 判断他的value类型是不是字典
                if isinstance(value, dict):
                    # 是的话将这个key加到数组中biz_content
                    complex_keys.append(key)
    
            # 将字典类型的数据dump出来
            for key in complex_keys:
                # 将字典取出后添加到整个大字典中,然后将后面的内容序列化  separators是用来获取不那么紧凑的json格式的数据
                data[key] = json.dumps(data[key], separators=(',', ':'))
            # 返回一个列表套元组的形式的数据,然后进行升序排序
            return sorted([(k, v) for k, v in data.items()])
    
        # 用来做签名相关
        def sign(self, unsigned_string):
            # 开始计算签名
            key = self.app_private_key   # 商家私钥
            signer = PKCS1_v1_5.new(key)  # 将商家私钥当作参数生成一个签名
            signature = signer.sign(SHA256.new(unsigned_string))  # 对象调用一个方法生成签名
            # base64 编码,转换为unicode表示并移除回车
            sign = encodebytes(signature).decode("utf8").replace("\n", "")
            return sign
    
        def _verify(self, raw_content, signature):
            # 开始计算签名
            key = self.alipay_public_key
            signer = PKCS1_v1_5.new(key)
            digest = SHA256.new()
            digest.update(raw_content.encode("utf8"))
            if signer.verify(digest, decodebytes(signature.encode("utf8"))):
                return True
            return False
    
        def verify(self, data, signature):
            if "sign_type" in data:
                sign_type = data.pop("sign_type")
            # 排序后的字符串
            unsigned_items = self.ordered_data(data)
            message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)
            return self._verify(message, signature)
    复制代码
    支付宝alipay的代码展示

    三. Django项目中的使用

      首先附一张支付宝支付流程图:

      在项目中注册一个APP用于支付宝接口的调用,同时将支付宝接口使用需要的一些代码与公钥等文件放入一个文件夹下,目录如下:

      其实只要将其中的代码复制修改即可,payinit中需要提供app_id及回调地址等信息,里面有注释,同时还需要提供应用私钥与支付宝公钥。

    from datetime import datetime
    from Crypto.PublicKey import RSA
    from Crypto.Signature import PKCS1_v1_5
    from Crypto.Hash import SHA256
    from urllib.parse import quote_plus
    from base64 import decodebytes, encodebytes
    import json
    
    
    class AliPay(object):
        """
        支付宝支付接口(PC端支付接口)
        """
        def __init__(self, appid, app_notify_url, app_private_key_path,
                     alipay_public_key_path, return_url, debug=False):
            self.appid = appid
            self.app_notify_url = app_notify_url
            self.app_private_key_path = app_private_key_path
            self.app_private_key = None
            self.return_url = return_url
            with open(self.app_private_key_path) as fp:
                self.app_private_key = RSA.importKey(fp.read())
            self.alipay_public_key_path = alipay_public_key_path
            with open(self.alipay_public_key_path) as fp:
                self.alipay_public_key = RSA.importKey(fp.read())
    
            if debug is True:
                self.__gateway = "https://openapi.alipaydev.com/gateway.do"
            else:
                self.__gateway = "https://openapi.alipay.com/gateway.do"
    
        def direct_pay(self, subject, out_trade_no, total_amount, return_url=None, **kwargs):
            biz_content = {
                "subject": subject,
                "out_trade_no": out_trade_no,
                "total_amount": total_amount,
                "product_code": "FAST_INSTANT_TRADE_PAY",
                # "qr_pay_mode":4
            }
    
            biz_content.update(kwargs)
            data = self.build_body("alipay.trade.page.pay", biz_content, self.return_url)
            return self.sign_data(data)
    
        def build_body(self, method, biz_content, return_url=None):
            data = {
                "app_id": self.appid,
                "method": method,
                "charset": "utf-8",
                "sign_type": "RSA2",
                "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
                "version": "1.0",
                "biz_content": biz_content
            }
    
            if return_url is not None:
                data["notify_url"] = self.app_notify_url
                data["return_url"] = self.return_url
    
            return data
    
        def sign_data(self, data):
            data.pop("sign", None)
            # 排序后的字符串
            unsigned_items = self.ordered_data(data)
            unsigned_string = "&".join("{0}={1}".format(k, v) for k, v in unsigned_items)
            sign = self.sign(unsigned_string.encode("utf-8"))
            # ordered_items = self.ordered_data(data)
            quoted_string = "&".join("{0}={1}".format(k, quote_plus(v)) for k, v in unsigned_items)
    
            # 获得最终的订单信息字符串
            signed_string = quoted_string + "&sign=" + quote_plus(sign)
            return signed_string
    
        def ordered_data(self, data):
            complex_keys = []
            for key, value in data.items():
                if isinstance(value, dict):
                    complex_keys.append(key)
    
            # 将字典类型的数据dump出来
            for key in complex_keys:
                data[key] = json.dumps(data[key], separators=(',', ':'))
    
            return sorted([(k, v) for k, v in data.items()])
    
        def sign(self, unsigned_string):
            # 开始计算签名
            key = self.app_private_key
            signer = PKCS1_v1_5.new(key)
            signature = signer.sign(SHA256.new(unsigned_string))
            # base64 编码,转换为unicode表示并移除回车
            sign = encodebytes(signature).decode("utf8").replace("\n", "")
            return sign
    
        def _verify(self, raw_content, signature):
            # 开始计算签名
            key = self.alipay_public_key
            signer = PKCS1_v1_5.new(key)
            digest = SHA256.new()
            digest.update(raw_content.encode("utf8"))
            if signer.verify(digest, decodebytes(signature.encode("utf8"))):
                return True
            return False
    
        def verify(self, data, signature):
            if "sign_type" in data:
                sign_type = data.pop("sign_type")
            # 排序后的字符串
            unsigned_items = self.ordered_data(data)
            message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)
            return self._verify(message, signature)
    pay.py
    from .pay import AliPay
    import os
    
    
    def ali_init():
        # o_你自己的应用ID
        app_id = "*************"
        # 支付宝收到用户的支付,会向商户发两个请求,一个get请求,一个post请求
        # o_你自己公网服务器处理支付宝回调的POST请求,验证订单
        notify_url = "http://39.100.155.49:8000/order/aliback/"
        # # o_你自己公网服务器处理支付宝回调的GET请求,将订单结果展现给用户
        return_url = "http://39.100.155.49:8000/order/aliback/"
        # o_你自己的私钥
        alipay_private_key_path = os.path.join(os.path.dirname(__file__), 'alipay_private_2048.txt')
        # o_你自己的公钥
        alipay_public_key_path = os.path.join(os.path.dirname(__file__), 'alipay_public_2048.txt')
    
        alipay = AliPay(
            appid=app_id,
            app_notify_url=notify_url,
            return_url=return_url,
            app_private_key_path=alipay_private_key_path,
            alipay_public_key_path=alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
            debug=True,  # 默认False,
        )
        return alipay
    payinit.py
    from rest_framework.views import APIView
    
    from luffyapi.libs.alipay import payinit
    import time, hashlib
    from django.core.cache import cache
    from rest_framework.response import Response
    
    
    class AliPayAPIView(APIView):
        def post(self, request, *args, **kwargs):
            # 获取前台商品的信息
            subject = request.data.get('subject')
            money = request.data.get('money')
    
            # 初始化alipay
            alipay = payinit.ali_init()
    
            # 生成订单号
            info = str(time.time()) + subject + money
            pay_num = hashlib.md5(info.encode('utf-8')).hexdigest()
    
            # redis存储
            cache.set(pay_num, False, 300)
    
            try:
                # 生成订单链接
                query_params = alipay.direct_pay(
                    subject=subject,  # 商品名描述
                    out_trade_no=pay_num,  # 商户订单号
                    total_amount=money,  # 交易金额(单位: 元 保留俩位小数)
                )
                pay_url = "https://openapi.alipaydev.com/gateway.do?{}".format(query_params)
            except:
                return Response({})
    
            return Response({
                'pay_num': pay_num,
                'pay_url': pay_url
            })
    
    
    from rest_framework.viewsets import ViewSet
    
    
    class ApiBackViewSet(ViewSet):
        def get(self, request, *args, **kwargs):
            # 初始化alipay
            alipay = payinit.ali_init()
            params = request.GET.dict()
            sign = params.pop('sign', None)
            status = alipay.verify(params, sign)
            print('GET验证', status)
            if status:
                # 获取订单状态,显示给用户
                return Response('支付成功')
    
        def post(self, request, *args, **kwargs):
            # 初始化alipay
            alipay = payinit.ali_init()
            # 检测是否支付成功
            # 去请求体中获取所有返回的数据:状态/订单号
            from urllib.parse import parse_qs
            body_str = request.body.decode('utf-8')
            post_data = parse_qs(body_str)
    
            post_dict = {}
            for k, v in post_data.items():
                post_dict[k] = v[0]
            print(post_dict)
    
            sign = post_dict.pop('sign', None)
            # 通过调用alipay的verify方法去二次认证
            status = alipay.verify(post_dict, sign)
            if status:
                # 修改订单状态
                pass
            return Response('验证成功')
    调用支付宝接口对应的views.py

      这里需要注意一点,如果你的项目本地测试接口,支付成功之后支付宝是无法朝回调地址成功发送请求的,你需要将项目上线。

      该篇博客来自https://www.cnblogs.com/mcc61/p/11178444.html,我只是大自然的搬运工。

     

      

     

     

      

    转载于:https://www.cnblogs.com/maoruqiang/p/11247185.html

    展开全文
  • 创建付款头 SELECT ap_checks_s.nextval INTO x_line_rec.check_id FROM sys.dual; ap_checks_pkg.insert_row ap_reconciliation_pkg.insert_payment_history 锁定发票 ap_invoices_pkg.lock_row(x_line
  • 问题解析发布 小 编 :q~~①9~*~970~*~746~*~****支付宝付款接口不支持个人商城网站接入;买企业支付宝 只需求几百元即可达到即时到账 在线支付的效果,主张户=包括可关联11个 支付宝成为企 业 账 户的功能,相当于...
  • 支付宝快速付款接口的实现

    千次阅读 2007-07-19 23:09:00
    项目需求说明,在涉及电子网站的项目中经常要实现支付接口,以实现商品的购买或者服务的购买,而要实现支付接口,我们往往会实现支付宝快速付款接口,实现该接口就能实现用户的快速付款,在该接口中支付宝对买卖方不任担...
  • 在商户平台设置调用接口的ip,填的是我电脑ip:192.168.0.x。 我在程序里调的时候参数ip也填的这个。 但返回信息提示:此ip地址不允许调用接口,如果需要请登录微信商户平台更改设置。 我确定过,平台设置和我的...
  • 详细去这里:https://blog.csdn.net/suprezheng/article/details/84931225
  • 主是是支付宝接口,包括各种语言的各种接口,都有详细的说明文档,借参考(自已也是做B2C网站的时候收集的)自己是用asp.net开发的,asp.net接口代码测试后可用,具体还是跟支付宝那边签合同的,详情咨询支付宝客服...
  • 微信企业付款接口API

    万次阅读 2016-01-14 14:52:52
    企业付款业务是基于微信支付商户平台的资金管理能力,为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,提供通过API完成企业付款的功能。 比如目前的保险行业向客户退保、给付、理赔。 企业付款...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,027
精华内容 810
关键字:

付款接口