微信小程序云开发-支付

1.概括

微信小程序云开发调用官方支付,需要两步:

1.根据信息获取支付凭证;2.使用支付凭证发起支付流程。

PS:

1.使用官方云支付,需要【非个人小程序账号】,并且【开通了支付功能(目前¥300)】,会得到一个【商户号】。

2.支付凭证是我自己起的名字,总之就是官方给你的支付信息,用于发起支付流程。

2.代码

2.1 html

ps:一个简单的按钮

<view class="action margin-0 flex-sub text-green " 
      bindtap="toValid" data-target="Image">
          <text class="cuIcon-moneybag"></text>支付
</view>

 

2.2 js

PS:代码中有包含我自己的功能逻辑,即不是所有参数都是支付必须的;比如第一步获取支付凭证中订单号和金额是支付必须的,参考云函数所需参数即可。

//认证支付-1生成支付信息
  toValid(e) {
    let nonceStr = Math.random().toString(36).substr(2, 15);
    let timeStamp = parseInt(Date.now() / 1000) + '';
    let orderNum = "nyt" + nonceStr + timeStamp;//生成自定义订单号
    this.setData({
      ['payInfo.orderNum'] : orderNum
    })
    wx.cloud.callFunction({
      name: 'getXXXInfo',
      data: {
        action: "XXX",
        orderNum: this.data.payInfo.orderNum,//自定义订单号
        price: this.data.payInfo.price//支付金额,1=1分
      },
      success: res => {
        console.log(res);
        this.doPay(res.result,res.requestID);
      },
      fail: res => {
        wx.showToast({
          image: '/assets/images/warn.png',
          title: '请求失败'
        })
      }
    })
  },
//认证支付-2根据支付信息发起支付
  doPay(payData,payRequestId){
    wx.requestPayment({
      nonceStr: payData.nonceStr,
      package: payData.package,
      paySign: payData.paySign,
      signType: payData.signType,
      timeStamp: payData.timeStamp,
      success: (res)=>{
        //修改用户类型
        this.setData({
          ['userInfo.userType']:'vip' 
        })
        this.hideModal();
        //更新用户类型
        this.rf_updateUserInfo(this.data.userInfo,'userType');
      },
      fail: (res) =>{
        wx.showToast({
          image: "/assets/images/warn.png",
          title: '支付失败',
        })
      },
      complete: (res)=> {
        console.log(res);
        //记录支付详情
        this.recordPay(payData, res.errMsg, payRequestId);;          
      }
    })
  },
//认证支付-3记录支付结果
  recordPay(payData,result,payRequestId){
    console.log(payRequestId);
    //添加支付记录
    collectionPay.add({
      data:{
        payRequestId: payRequestId,
        payNo: payData.nonceStr,
        payPackage: payData.package,
        paySign: payData.paySign,
        payTime: payData.timeStamp,
        orderTime: db.serverDate(),
        orderNum: this.data.payInfo.orderNum,
        orderPrice: this.data.payInfo.price,
        orderUser: this.data.hostInfo.userName,
        orderOpenid: this.data.hostInfo._openid,
        orderResult: result
      },
      success:(res=>{
        console.log("添加支付记录");
        
      }),
      fail:console.error,
      complete: (res =>{
        //触发页面刷新加载
        this.rf_bindPageData();
      })
    })

  },

以上是小程序中的代码,其中第一步会调用云函数获取支付凭证。【云函数】如下:

//云函数js中-支付处理
  async function doUserPay(event) {
    const wxContext = cloud.getWXContext();
    let orderNum = event.orderNum;
    let price = event.price;
    //3,初始化支付
    const api = tenpay.init(payConfig);
    // 订单信息放在了小程序中,也可以放在云函数
    // const nonceStr = Math.random().toString(36).substr(2, 15);
    // const timeStamp = parseInt(Date.now() / 1000) + '';
    // const out_trade_no = "otn" + nonceStr + timeStamp;
    let result = await api.getPayParams({
      out_trade_no: orderNum,
      body: '用户认证',
      total_fee: price, //订单金额(分),
      openid: wxContext.OPENID //付款用户的openid
    });
    return result;

  }

3.结果截图

1.大概就是点击支付按钮,第一步获取支付凭证ok,第二步发起支付就会弹出微信支付输密码页面,输入密码就可以支付完成;

2.代码中有写打印信息console.log,下面是一个点击支付按钮-输入密码时直接取消支付的打印结果:

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
老规矩,先看本节效果图我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。核心代码就下面这些一,创建一个云开发小程序关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频:https://edu.csdn.net/course/play/9604/204528创建云开发小程序有几点注意的1,一定不要忘记在app.js里初始化云开发环境。2,创建完云函数后,一定要记得上传二, 创建支付的云函数1,创建云函数pay三,引入三方依赖tenpay我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。1,首先右键pay,然后选择在终端中打开2,我们使用npm来安装这个依赖。在命令行里执行 npm i tenpay安装完成后,我们的pay云函数会多出一个package.json 文件到这里我们的tenpay依赖就安装好了。四,编写云函数pay完整代码如下//云开发实现支付 const cloud = require('wx-server-sdk')cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = ;exports.main = async(event, context) => 一定要注意把appid,mchid,partnerKey换成你自己的。到这里我们获取小程序支付所需参数的云函数代码就编写完成了。不要忘记上传这个云函数。出现下图就代表上传成功五,写一个简单的页面,用来提交订单,调用pay云函数。这个页面很简单,1,自己随便编写一个订单号(这个订单号要大于6位)2,自己随便填写一个订单价(单位是分)3,点击按钮,调用pay云函数。获取支付所需参数。下图是官方支付api所需要的一些必须参数。下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。六,调用wx.requestPayment实现支付下图是官方的示例代码这里不在做具体讲解了,完整的可以看视频。实现效果1,调起支付键盘2,支付完成3,log日志,可以看出不同支付状态的回调上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。下图是支付失败的回调,下图是支付完成的状态。到这里我们就轻松的实现了微信小程序支付功能了。是不是很简单啊,完整的讲解可以看视频。
美妆微信小程序订单的JS代码主要包括以下几个方面的内容: 1. 订单列表渲染: 根据用户的订单数据,使用wx.request从后端获取订单列表数据,然后在前端用wx.navigateTo或者wx.redirectTo来跳转到订单列表页面。在订单列表页面的onLoad函数中,通过setData方法将请求到的订单数据保存在页面的data中。然后在wxml文件中使用wx:for来遍历订单数据,构建订单列表的视图。 2. 订单详情展示: 在订单列表页面的wxml文件中,为每一个订单列表项绑定一个点击事件,点击事件会将对应订单的订单号作为参数传递给跳转到订单详情页的函数中。然后在订单详情页的onLoad函数中通过参数获取到订单号,并使用wx.request向后端请求订单详情数据。然后再使用setData将订单详情数据保存在页面的data中,在页面的wxml文件中展示出来。 3. 订单支付: 在订单详情页中,添加一个支付按钮,绑定一个点击事件。点击事件触发时,调用wx.requestPayment方法,传递订单号、支付金额等参数给后端,进行支付操作。支付成功后,后端会返回支付结果,根据支付结果显示相应的提示消息,成功则跳转到支付成功页,失败则显示相应的失败提示。 4. 订单取消和删除: 在订单详情页中,添加取消订单和删除订单的按钮,分别绑定点击事件。点击取消订单按钮时,调用wx.showModal显示确认取消订单的提示框,点击确认后,向后端发送请求进行取消订单的操作。点击删除订单按钮时,同样调用wx.showModal显示确认删除订单的提示框,点击确认后,向后端发送请求进行删除订单的操作。操作成功后,根据接口返回的结果刷新订单列表数据。 以上是美妆微信小程序订单的JS代码的基本实现逻辑,具体的实现细节和接口调用方式还需要根据具体需求进行配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值