微信小程序——支付

这篇具有很好参考价值的文章主要介绍了微信小程序——支付。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小程序支付是专门被定义使用在小程序中的支付产品。目前在小程序中能且只能使用小程序支付的方式来唤起微信支付。

先判断协议字段返回,再判断业务返回,最后判断交易状态

除被扫支付场景以外,商户系统先调用统一下单接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP、小程序等不同场景生成交易串调起支付
注意:
appid必须为最后拉起收银台的小程序appid;
mch_id为和appid成对绑定的支付商户号,收款资金会进入该商户号;
trade_type请填写JSAPI;
openid为appid对应的用户标识,即使用wx.login接口获得的openid


//test.wxml
<button bind:tap="pay">支付</button>
//test.js
Page({
pay:function(){
    wx.request({
      url: "http://111.0.0.1:8000/pay/",
      method: "POST",
      data:{"login_key":wx.getStorageSync("login_key")},
      header: { "content-type": "application/json" },
      success: function (e) {
        console.log(e)
        // 签权调起支付
        wx.requestPayment({
          'timeStamp': e.data.data.timeStamp,
          'nonceStr': e.data.data.nonceStr,
          'package': e.data.data.package,
          'signType': e.data.data.signType,
          'paySign': e.data.data.paySign,
          'success': function (res)
           {
             console.log(res,"成功")
            },
          'fail': function (res)
          {
            console.log("支付失败",res)
           },     
        })
      }
    })
  },
})


from rest_framework.views import  APIView
from  rest_framework.response import  Response
from django.core.cache import cache
import hashlib,time
import random
from app01.wx import settings
import requests
class Pay(APIView):
    def post(self,request):
        param=request.data
        if param.get("login_key"):            #从redis中拿到小程序端login_key所对应得opendi&session_key值
            openid,session_key=cache.get(param.get("login_key")).split("&")
            self.openid=openid
            # 获取用户IP
            # 1.如果是Nginx做的负载就要HTTP_X_FORWARDED_FOR
            if request.META.get('HTTP_X_FORWARDED_FOR'):
                self.ip =request.META['HTTP_X_FORWARDED_FOR']
            else:
                # 2.如果没有用Nginx就用REMOTE_ADDR
                self.ip = request.META['REMOTE_ADDR']
            # 调用 生成商户订单 方法
            data = self.pay()
            return Response({"code":200,"msg":"ok","data":data})
        else:
            return Response({"code":200,"msg":"缺少参数"})

    def get_str(self):
        str_all="1234567890abcdefghjklmasdwery"  # 注意 开发活动功能时, 去掉1,i,0,o
        nonce_str="".join(random.sample(str_all,20))
        return nonce_str

    def get_order(self):
        order_id=str(time.strftime("%Y%m%d%H%M%S"))
        return order_id

    # 处理返回预付单方法
    def xml_to_dict(self,data):
        import xml.etree.ElementTree as ET
        xml_dict={}
        data_dic=ET.fromstring(data)
        for item in data_dic:
            xml_dict[item.tag]=item.text
        return  xml_dict

    # 获取sign签名方法
    def get_sign(self):
        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.openid,
            "body": self.body,
            "trade_type": "JSAPI",
            "appid": self.appid,
            "total_fee": self.total_fee,
            "mch_id": self.mch_id
        }
        sign_str = "&".join([f"{k}={data_dic[k]}" for k in sorted(data_dic)])
        sign_str = f"{sign_str}&key={settings.pay_apikey}"
        md5 = hashlib.md5()
        md5.update(sign_str.encode("utf-8"))
        return md5.hexdigest().upper()

    # 1.生成商户订单 提供 支付统一下单 所需参数
    def pay(self):
        self.appid=settings.AppId
        self.mch_id=settings.pay_mchid
        self.nonce_str=self.get_str()
        self.body="商品名"  # 商品名一般由小程序端传到后端
        self.out_trade_no=self.get_order()
        self.total_fee=1
        self.spbill_create_ip=self.ip
        self.notify_url="http://www.baidu.com"
        self.trade_type="JSAPI"
        self.sign = self.get_sign()  # 获取sign 签名
        data=f'''
        <xml>
               <appid>{self.appid}</appid>
               <body>{ self.body}</body>
               <mch_id>{self.mch_id}</mch_id>
               <nonce_str>{self.nonce_str}</nonce_str>
               <notify_url>{self.notify_url}</notify_url>
               <openid>{self.openid}</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>
        '''
        # 2.支付统一下单
        url="https://api.mch.weixin.qq.com/pay/unifiedorder"
        # 3.返回预付单信息
        response=requests.post(url,data.encode("utf-8"),headers={"content-type":"application/xml"})
        res_data=self.xml_to_dict(response.content)
        data=self.two_sign(res_data["prepay_id"])
        return  data

    # 4.将组合数据再次签名
    def two_sign(self,prepay_id):
        timeStamp=str(int(time.time()))
        nonceStr=self.get_str()
        data_dict={
            "appId":settings.AppId,
            "timeStamp":timeStamp,
            "nonceStr":nonceStr,
            "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={settings.pay_apikey}"
        md5 = hashlib.md5()
        md5.update(sign_str.encode("utf-8"))
        sign=md5.hexdigest().upper()
        data_dict["paySign"]=sign
        data_dict.pop("appId")
        # 5.返回支付参数到小程序端,小程序端获取所需参数向微信服务器发送 调起支付 方法
        return  data_dict
项目/urls.py文章来源地址https://www.toymoban.com/news/detail-466231.html

到了这里,关于微信小程序——支付的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • app第三方支付,微信小程序支付

    最近公司开发一个app,需要从app跳转到小程序去微信支付,当时在网上看了好长时间没有看到适合自己的,在这里记录一下,也方便自己以后可以再复习一下,毕竟本人脑子不太好使,只能记下来。 app跳转页面携带参数到小程序 小程序接收参数,拉起微信支付

    2024年02月16日
    浏览(79)
  • 微信小程序调用微信支付

    最近开发到小程序调用微信支付功能,看了下微信支付商户官网API文档再结合项目本身情况因是本人第一次接触走了很多弯路所以记录下开发的过程。 本次微信支付用的是老版本XML格式的,所有的支付功能直接复制就可以用了。无需大量改动把相应的商户appid 和商户支付秘钥

    2024年02月11日
    浏览(61)
  • 微信小程序(云开发)----微信支付

    开通微信支付云调用,首先需要小程序已经开通了微信支付,而微信支付是不支持个人小程序的,需要企业账户才行,其次需要小程序已经绑定了商户号 微信公众平台官网 邮箱不能在微信平台注册过。。。。有注册过公众号、订阅号的都不行。。。。需要重新注册个QQ 选择

    2024年02月10日
    浏览(57)
  • 微信小程序接入微信支付

    微信支付前提是:注册了微信平台后,必须开通企业商户号,需要把工商登记证明,企业银行账户开户证明,组织机构代码等提交上去进行审核https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal 开通商户号之后,我们需要得到密钥,和证书等相关信息,根据如下文档生成:

    2024年02月14日
    浏览(58)
  • 微信小程序webview(H5页面)调用微信小程序支付

    1.业务描述:微信小程序商城入口进入的页面是商城H5页面,在H5页面进行微信支付如何实现; 2.微信小程序(webview访问H5页面)必须使用微信小程序支付; 如何实现以及实现方式以及支付后页面返回功能: 商品详情(h5页面)--商品确认页(h5页面)--收银台(h5页面)(点击调

    2024年02月11日
    浏览(63)
  • 微信小程序支付流程(前端)

    微信小程序的支付只要用到官方的支付API : wx.requestPayment(Object object) 官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html 1、总体流程 一般情况下,前端接触到的支付流程是这样的:商品页选择商品 —— 提交商品订单(跳转到确认订单页) ——

    2024年02月11日
    浏览(52)
  • 微信小程序的支付流程

    微信小程序为电商类小程序,提供了非常完善、优秀、安全的支付功能 在小程序内可调用微信的 API 完成支付功能,方便、快捷 场景如下图所示: 用户通过分享或扫描二维码进入商户小程序,用户选择购买,完成选购流程 调起微信支付控件,用户开始输入支付密码 密码验证

    2024年02月02日
    浏览(56)
  • 微信小程序支付完整流程

    1、注册微信支付商户号(由上级或法人注册) 注册链接:https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal#none 此商户号,需要由主管及更上级领导进行注册,会成为公司收款账户 企业注册需要材料:营业执照,对公银行账户信息,法人身份证 2、注册小程序账号(由上级或

    2024年02月10日
    浏览(48)
  • 微信小程序 实现支付流程

    开发微信小程序时,涉及到微信支付的开发环节,特此记录一下 官方注册地址👉👉:接入微信支付 - 微信商户平台 备注:此商户号为超级管理员,一般由更上级领导进行注册(     非前端人员注册    ),会成为公司收款账户,主要填写超管信息并上传企业资料(如:营业执

    2024年04月14日
    浏览(58)
  • 微信小程序接入微信支付流程

    1、支付场景:点击支付按钮唤起微信支付弹窗,输入正确密码后完成支付。 2、基本流程:点击支付按钮首先生成一个订单,然后在后端调用微信api接口进行统一下单,将接口返回的数据回传到前端拉起支付操作,然后异步通知支付结果。 1、微信公众平台配置 点击功能 –

    2023年04月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包