uniapp微信小程序支付,并设置订阅消息

使用uniapp开发的一个电商小程序,使用微信支付。用户消费会得到积分,支付完成后,积分的变动需要通过微信公众号进行提醒。

整体流程,用户选择好商品后,点击立即购买,然后提交订单。 然后弹出申请消息通知弹窗,选择好后,调用接口,获取支付信息,唤起支付,最后支付完成,公众号收到消息

提前将微信支付信息和消息模板这些配置好

代码实现:

提交订单页面

js 复制代码
// $u.debounce这个方法是u-view提供的,一个防抖的方法
<view class="pay-btn" @click="$u.debounce(subOrder, 1500,true)">提交订单</view>

<script>
// 将支付方法封装在mixin里面的  也可以直接拿出来用
import { mixin }  from '@/common/pay.js'

export default {
  mixins: [mixin], //混入文件

  methods:{
  // 提交订单
    subOrder() {
      //  ...提交订单前的一些判断
      if (!this.isCheck) {
         return this.$ui.textToast('请先同意商品购买协议')
      }
      if (!this.addressInfo?.id) {
         return this.$ui.textToast('请先选择收货地址')			
      }
      // 加载loding
      this.$ui.showLoading()
      // 提交订单接口所需要的数据
      const data = {        
         is_shopping: 0,
         address_id: this.addressInfo,
         commodity_price: this.orderInfo.commodity_amount,
         price: this.orderInfo.amount,
         pay_method:1,
      }
      // 请求提交订单接口
      orderSubmit(data).then(res => {
         // 关闭加载
         this.$ui.hideLoading()
         // 调用mixin中的支付方法
         this.orderPayment()
      })  
     },
    }
  }
</script> 

pay.js 正常情况下是支付成功后在弹出这个消息通知申请的,我这里是因为后端需要判断,所以房租前面的,注意这个弹窗只能在支付回调还有通过点击按钮触发

js 复制代码
// 接口方法
import { orderPay} from '@/api/order.js'

export const mixin = {
	 data() {
      return {
           
      }
	 },
         
   methods:{
     // 结构所需的参数
     orderPayment({ id, order_no, pay_method, payType, price }){
       const _this = this
       // 弹出消息通知申请
       uni.requestSubscribeMessage({
          //此处填写刚才申请模板的模板ID
	       tmplIds: ['oDnJ7QGEdhR-roapx......'],
		  success(res) {
                    // 调用支付方法
		    _this.wxpay(id, order_no, pay_method, payType, price)
		  }
	     })
     },
     // 微信支付
     async wxpay(id, order_no, pay_method, payType, price){
       uni.showLoading({
         mask:true, 
	       title:'加载中...'
       })
       const data = {
               order_id: id,
	             order_no
	     }
       // 调用接口
       const res = await orderWxShopPay(data)
       const _this = this
       uni.hideLoading()
       
       // 唤起微信支付
       wx.requestPayment({
	        timeStamp: String(res.data.timeStamp),
	        nonceStr: String(res.data.nonceStr),
	        package: String(res.data.package),
          signType: String(res.data.signType),
          paySign: String(res.data.paySign),
		success() {
		  _this.$ui.textToast('微信支付成功')
		  _this.toOrder(payType)
		},
		fail(err) {
		  console.log(JSON.stringify(err))
	          _this.$ui.textToast('支付失败')
		}
       }); 
     }
   },
   
   // 根据type跳转到不同的页面
   toOrder(payType) {
     setTimeout(() => {
       if (payType === 'groupOrder') {
          return this.$Router.push('')
       }
       this.$Router.replace('')
	   }, 300)
   },
}

在补充些微信小程序订阅消息的内容

微信小程序消息推送是我们常见的业务开发场景,经研究实践,发送订阅消息可分成四个步骤:

  1. 申请消息模板:生成消息模板ID,确定模板详情:标题、内容等;
  2. 前端订阅消息:通过按钮或者支付回调向用户发起订阅消息的询问;
  3. 后端进行推送:用户同意订阅后,后端请求微信消息推送接口携带模板ID、模板内容(可理解成数据字段)用户open_id、跳转地址等参数进行推送;
  4. 用户收到消息:用户在服务通知中收到该模板消息的卡片,点击可转向小程序中的跳转地址,可传参。

关于微信小程序订阅消息这块,uni-app微信小程序订阅消息推送实践,写的很详细。

相关推荐
奇迹_h9 小时前
打造你的HTML5打地鼠游戏:零基础入门实践
前端
SuperEugene9 小时前
Vue生态精选篇:Element Plus 的“企业后台常用组件”用法扫盲
前端·vue.js·面试
Neptune19 小时前
JavaScript回归基本功之---类型判断--typeof篇
前端·javascript·面试
贾铭9 小时前
如何实现一个网页版的剪映(三)使用fabric.js绘制时间轴
前端·后端
子兮曰10 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
万少12 小时前
使用Trae轻松安装openclaw的教程-附带免费token
前端·openai·ai编程
浪浪山_大橙子13 小时前
OpenClaw 十分钟快速,安装与接入完全指南 - 推荐使用trae 官方 skills 安装
前端·人工智能
忆江南13 小时前
iOS 可视化埋点与无痕埋点详解
前端
离开地球表面_9913 小时前
金三银四程序员跳槽指南:从简历到面试再到 Offer 的全流程准备
前端·后端·面试
_柳青杨13 小时前
跨域获取 iframe 选中文本?自己写个代理中间层,再也不求后端!
前端