欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

uniapp 电商小程序 微信支付功能及当前页面刷新

程序员文章站 2022-07-12 14:58:00
...

微信支付

uniapp 电商小程序 微信支付功能及当前页面刷新

微信支付函数如下:

// 此处的orderId是一个传递过来的参数,可忽略
// this.needpPay 是一个是否能够进行微信支付的开关,这个是跟上文函数逻辑有关系的
pay(orderId){
	if(!this.needpPay){
		return;
	}
	let _this = this;
	// this.$request.urlRequest是一个函数请求的接口
	this.$request.urlRequest(
		'/order/user/prepay',
		{
		  "openId": uni.getStorageSync('openId'),
		  "orderId": orderId,
		  "payType": 0
		},
		'POST',
		function (res) {
			let data = res;
			// 微信支付的接口
			uni.requestPayment({
				provider: 'wxpay',
				timeStamp: data.result.timeStamp,
				nonceStr: data.result.nonceStr,
				package: 'prepay_id='+data.result.prepayId,
				signType: data.result.signType,
				paySign: data.result.sign,
				success: function(res) {
					console.log(res)
					uni.showToast({
						title: "支付成功",
						duration: 3000,
						icon: 'none',
					});
					// 此处的代码为刷新当前页面
					var pages = getCurrentPages();
					var curPage = pages[pages.length - 1];
					curPage.onLoad(_this.option);
				},
				fail: function(err) {
					console.log(err)
					uni.showModal({
						content: "支付失败",
						showCancel: false,
					})
				}
			});
		}
	)
}

微信支付成功后,当前页面的“待付款”状态需要改变成“待发货”。此时就需要进行当前页面的刷新。

刷新当前页面需要用到的是uniapp中的getCurrentPages()

uniapp 电商小程序 微信支付功能及当前页面刷新

	// 此处的代码为刷新当前页面
	var pages = getCurrentPages();  // 获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面
	var curPage = pages[pages.length - 1]; // 当前页面是这个页面栈数组中的最后一个
	curPage.onLoad(_this.option);//由于当前页面加载的时候,需要有个参数,这个参数可以在当前页面加载的时候保存一下。
onLoad(option){
	//此页面加载数据
	this.getData(option.id);
	//保存当前页面的option对象
	this.option = option;
},

其他博主的知识点汇总情况:

getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。 注意:

不要尝试修改页面栈,会导致路由以及页面状态错误。
不要在 App.onLaunch 的时候调用 getCurrentPages(),此时page 还没有生成。

熟悉页面栈后才能更好的使用getCurrentPages(),下面将列举几种常用的使用场景:
1、利用页面栈的长度
例如:进入小程序非默认首页时,需要提供返回首页的按钮或者执行其它事件
  onShow() {
    let pages = getCurrentPages(); //当前页面栈
    if (pages.length == 1) {
     //todo
    }
  },

2、跨页面赋值
 let pages = getCurrentPages();//当前页面栈
 let prevPage = pages[pages.length - 2];//上一页面
  prevPage.setData({
     //直接给上移页面赋值
  });

3、页面跳转后自动刷新
 //举例
    wx.switchTab({ 
     url: '../index/index', 
     success: function (e) { 
      var page = getCurrentPages().pop(); //当前页面
      if (page == undefined || page == null) return; 
      page.onLoad(); //或者其它操作
     } 
    })

4、获取当前页面相关信息
 let pages = getCurrentPages(); //当前页面栈
 //当前页面为页面栈的最后一个元素
 let prevPage = pages[pages.length - 1];//当前页面
 or
 // pop() 方法用于删除并返回数组的最后一个元素
 let prevPage = pages.pop();//当前页面
 
 console.log( prevPage.route) //举例:输出为‘pages/index/index’

以上就是我在微信小程序开发中经常会遇到的getCurrentPages()使用场景

此博客链接:
博客链接

微信账户登录

uni.login({
//第三方账户登录中的微信账户登录
	provider: 'weixin',
	success: function(loginRes) {
		// 获取用户信息				
		uni.getUserInfo({
			provider: 'weixin',
			success: function(infoRes) {				
				_this.userInfo = infoRes.userInfo;
				//将用户信息保存到本地缓存中
				uni.setStorageSync('userDetail',infoRes.userInfo)
				console.log(infoRes)
			}
		});
	}
});