?微信小程序?----支付接口

==文档==

流程搞清楚就行  我就直接丢代码了 ==文档==

# 支付接口
class Pay(APIView):
    def post(self, request, *args, **kwargs):
        login_key = request.data.get(‘login_key‘)
        if not login_key:
            return Response({‘status‘: 400, ‘msg‘: ‘参数错误‘})
        data_list = cache.get(login_key)
        if not data_list:
            return Response({‘status‘: 400, ‘msg‘: ‘没有login_key对应的值‘})
        session_key, open_id = data_list.split(‘&‘)
        # 把open_id放入self中 写pay方法
        self.open_id = open_id
        # 获取ip
        # 使用负载均衡 获取ip方法
        if request.META.get(‘HTTP_X_FORWARDED_FOR‘):
            self.ip =request.META.get(‘HTTP_X_FORWARDED_FOR‘)
        else:
            # 原本的ip获取
            self.ip = request.META.get(‘REMOTE_ADDR‘)
        data = self.pay()
        return Response({‘status‘: 200, ‘msg‘: ‘ok‘, ‘data‘:data})

    # 随机字符串
    def get_str(self):
        str_all = ‘1234567890abcdefjhigklmnpqrstuvwxyz‘
        nonce_str = ‘‘.join(random.sample(str_all, 20))
        return nonce_str

    # 签名
    def get_sign(self):
        # sign 不参与签名
        data_dic = {
            "nonce_str": self.nonce_str,
            "out_trade_no": self.out_trade_no,
            "spbill_create_ip": self.ip,
            "notify_url": self.notify_url,
            "openid": self.open_id,
            "body": self.body,
            "trade_type": "JSAPI",
            "appid": self.app_id,
            "total_fee": self.total_fee,
            "mch_id": self.pay_mchid
        }
        # 拼接
        # sorted 按照ASCII 排序
        sign_str = "&".join([f"{k}={data_dic[k]}" for k in sorted(data_dic)])
        sign_str = f"{sign_str}&key{setting.pay_apikey}"
        md5 = hashlib.md5()
        md5.update(sign_str.encode(‘utf-8‘))
        return md5.hexdigest().upper()

    # 订单id
    def get_order_id(self):
        order_id = str(time.strftime(‘%Y%m%d%X‘))
        return order_id

    # xml转dic
    def xml_to_dic(self, xml):
        import xml.etree.ElementTree as ET
        xml_dict = {}
        data_dic = ET.fromstring(xml)
        for item in data_dic:
            xml_dict[item.tag] = item.text
        return xml_dict

    # 支付接口
    def pay(self):
        self.app_id = setting.APP_ID
        self.pay_mchid = setting.pay_mchid
        self.pay_apikey = setting.pay_apikey
        self.nonce_str = self.get_str()
        # 订单id
        self.out_trade_no = self.get_order_id()
        self.body = ‘龙哥的生活费‘
        self.total_fee = 1
        self.spbill_create_ip = self.ip
        # 回调地址
        self.notify_url = ‘https://www.baidu.com‘
        self.trade_type = ‘JSAPI‘
        # 签名
        self.sign = self.get_sign()

        # 数据加密 且 变成xml形式
        data = f"""
        <xml>
            <appid>{self.app_id}</appid>
            <body>{self.body}</body>
            <mch_id>{self.pay_mchid}</mch_id>
            <nonce_str>{self.nonce_str}</nonce_str>
            <notify_url>{self.notify_url}</notify_url>
            <openid>{self.open_id}</openid>
            <out_trade_no>{self.out_trade_no}</out_trade_no>
            <spbill_create_ip>{self.spbill_create_ip}</spbill_create_ip>
            <total_fee>{self.total_fee}</total_fee>
            <trade_type>{self.trade_type}</trade_type>
            <sign>{self.sign}</sign>
        </xml>
        """
        # 发起请求
        url = ‘https://api.mch.weixin.qq.com/pay/unifiedorder‘
        response = requests.post(url=url, data=data.encode(‘utf-8‘),
                                 headers={‘content-type‘:‘application/xml‘}
                                 )
        data = self.xml_to_dic(response.content) # 二进制数据
        data = self.two_sign(data[‘prepay_id‘])
        return data

    # 再次签名
    def two_sign(self, prepay_id):
        data_dict = {
            "appId": setting.APP_ID,
            "timeStamp": str(int(time.time())),
            "nonceStr": self.get_str(),
            "package": f"prepay_id={prepay_id}",
            "signType": "MD5"
        }
        sign_str = "&".join([f"{k}={data_dict[k]}" for k in sorted(data_dict)])
        sign_str = f"{sign_str}&key={setting.pay_apikey}"
        md5 = hashlib.md5()
        md5.update(sign_str.encode("utf-8"))
        sign=md5.hexdigest().upper()
        data_dict["paySign"]=sign
        data_dict.pop("appId")
        return  data_dict

原文地址:https://www.cnblogs.com/lddragon/p/11832119.html

时间: 2024-10-03 08:44:36

?微信小程序?----支付接口的相关文章

微信小程序支付代码asp源码下载

昨天晚上给朋友写了一个asp的微信小程序支付接口,我这朋友的小程序服务器端用的asp做的,以前没有支付,非让我给写一个支付,因为必须是asp来写,他不会,所以我就帮他写了,顺便还写了一个asp获取用户资料头像和微信名入库的代码,也是asp源码,数据库用的是mdb的格式,还可以比较好用,微信小程序用asp做服务器端估计很少,应该有朋友需要,下载这个代码:ly.ftphn.com/wxpay.rar ============================================= 互相学习

php 微信小程序支付

直接贴代码: 前端测试按钮wxml: <view class="container"> <text class="name">当前选择:<参加活动> ¥0.01</text> <view class="pay" bindtap="onTap">确认支付</view> </view> wxss: .container { padding: 50r

微信小程序支付及退款流程详解

微信小程序的支付和退款流程 近期在做微信小程序时,涉及到了小程序的支付和退款流程,所以也大概的将这方面的东西看了一个遍,就在这篇博客里总结一下. 首先说明一下,微信小程序支付的主要逻辑集中在后端,前端只需携带支付所需的数据请求后端接口然后根据返回结果做相应成功失败处理即可.我在后端使用的是php,当然在这篇博客里我不打算贴一堆代码来说明支付的具体实现,而主要会侧重于整个支付的流程和一些细节方面的东西.所以使用其他后端语言的朋友有需要也是可以看一下的.很多时候开发的需求和相应问题的解决真的要跳出语

php对接微信小程序支付

前言:这里我就假装你已经注册了微信小程序,并且基本的配置都已经好了.注: 个人注册小程序不支持微信支付,所以我还是假装你是企业或者个体工商户的微信小程序,其他的商户号注册,二者绑定,授权,支付开通,就阅读文档吧,这里我先负责实战. 微信小程序支付开发文档: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1 基本流程: 1. 申请商户平台账号 https://pay.weixin.qq.com/in

微信小程序支付

关于微信小程序支付功能,他的官方文档真的写的很清楚了!但是整理吸收一下还是不错的 官网呈上:https://developers.weixin.qq.com/miniprogram/dev/api/wx.requestPayment.html 核心流程:下面的图和交互流程描述写的真是不能再清晰了 商户系统和微信支付系统主要交互: 1.小程序内调用登录接口,获取到用户的openid,api参见公共api[小程序登录API] 2.商户server调用支付统一下单,api参见公共api[统一下单API

PHP实现微信小程序支付

本文仅记录了微信小程序支付开发的基本流程和代码,具体业务需自行修改.tp5框架下演示: 参考: 微信小程序支付:业务流程 SDK与DEMO:  下载页 PHPPayDemo: demo 小程序端: goPay(e){ var that = this; //发起预支付,获取所需参数 wx.request({ url: app.globalData.host + '/api/wx_pay/createOrder', //请求地址 data: { openid: wx.getStorageSync('

Asp.net Core 微信小程序支付

最近要做一个微信小程序支付的功能 在网上找了一下 .net Core做微信支付的博客 和 demo 几乎没有 自己研究了好几天 参考了 很多 大牛的博客 勉强做出来了  因为参数都没有 比如 opid 小程序域名 所以只是简单的测了一下 模拟了微信支付的回调请求 后续等项目上线 会回来填坑的 第一次看小程序支付的api文档 看得我一脸懵逼 现在简单说一下吧 先上一个官方图 小程序支付的流程是这样的 首先 用户下单 然后后台生成订单 调用统一支付api(注意这并不是支付 只是算一个预下单 通知下微

微信小程序API接口

微信小程序API接口 wx.request(OBJECT)   wx.request发起的是 HTTPS 请求. OBJECT参数说明: url->开发者服务器接口地址->String; data->请求的参数->Object.String; header->设置请求的 header , header 中不能设置 Referer->Object; method->默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE,

asp写的微信小程序支付demo-服务器端是asp+mdb的

这个微信小程序支付demo代码是我用asp写的,微信小程序端加上服务器端用的asp和mdb数据库,下面是代码分享: <view class="container"> <view class='view'>订单说明:{{paydata.title}}</view> <view class='view inputview'> 支付金额:<input bindinput="bindKeyInput" type=&quo