django2.0调用银联支付接口实现银联支付

本文介绍了如何在Django2.0框架下实现银联支付功能,包括注册银联技术开放平台账号,下载密钥,安装必要模块如pyOpenSSL,并详细展示了`pay.py`、`views.py`、`urls.py`、`settings.py`等关键文件的配置过程,最后给出了实现效果的截图。参考了相关博客文章和GitHub资源,但直接用于商用可能存在风险。
摘要由CSDN通过智能技术生成
准备工作:

1.银联技术开放平台注册:https://open.unionpay.com/tjweb/acproduct/list?apiservId=448
2.点击网关支付 --> 我要测试 (按照提示下载密钥)
3.安装需要的模块 pip install pyOpenSSL

代码实现:
目录结构

在这里插入图片描述

pay.py 文件
import xxx  # 自行导入

class UnionPay:
    """
    银联支付接口(PC端)
    """
    def __init__(
            self,
            version,
            mer_id,
            front_url,
            back_url,
            backend_url,
            cert_path,
            debug=False
    ):
        self.version = version
        self.mer_id = mer_id
        self.front_url = front_url
        self.back_url = back_url
        self.backend_url = backend_url
        self.cert = {
   }
        self.cert_id = self.__get_cert_id(cert_path)

        if debug is True:
            # 支付网关
            self.gateway = "https://gateway.test.95516.com/gateway/api/frontTransReq.do"
            # 查询网关
            self.query_gateway = "https://gateway.test.95516.com/gateway/api/queryTrans.do"
        else:
            self.gateway = "https://gateway.95516.com/gateway/api/frontTransReq.do"
            self.query_gateway = "https://gateway.95516.com/gateway/api/queryTrans.do"

    def build_request_data(self, order_id, txn_amt, **kwargs):
        """
        构建请求数据
        :param order_id: 商户订单号
        :param txn_amt: 交易金额(单位: 分)
        :return:
        """
        request_data = {
   
            "version": self.version,  # 版本
            "encoding": "utf-8",  # 编码
            "txnType": "01",  # 交易类型  01:消费
            "txnSubType": "01",  # 交易子类  01:自助消费
            "bizType": "000201",  # 产品类型  000201:B2C网关支付
            "frontUrl": self.front_url,  # 前台通知地址
            "backUrl": self.back_url,  # 后台通知地址 需外网
            "signMethod": "01",  # 签名方法  01:RSA签名
            "channelType": "07",  # 渠道类型  07:互联网
            "accessType": "0",  # 接入类型  0:普通商户直连接入
            "currencyCode": "156",  # 交易币种  156:人民币
            "merId": self.mer_id,  # 商户代码
            "txnAmt": txn_amt,  # 订单金额(单位: 分)
            "txnTime": datetime.now().strftime("%Y%m%d%H%M%S"),  # 订单发送时间
            "certId": self.cert_id,
            "orderId": order_id,
            "signature": ""
        }
        request_data.update(**kwargs)
        self.get_sign(request_data)
        return request_data

    def pay_url(self, request_data):
        payment_url = "{}?{}".format(self.backend_url, parse.urlencode<
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值