微信小程序支付

个人理解微信小程序支付和微信支付二者所需的参数基本一致,一个是直接唤起微信支付程序,另一个是需要在小程序页面中转。

1、在H5投保页面区分当前环境是否在小程序。订单生成后走不同的支付方法

saveProposal(data).then(res => {
    this.visible.loading = false;
	if(res.code == 200){
		let proposalNo = res.data.proposalNo
		if(/miniProgram/i.test(userAgent)){ //判断是否是小程序
            //小程序支付
			appletPay({
				data : {openid : data.openid,proposalNo:proposalNo},
				success_url : encodeURIComponent(`${window.location.origin}${This.$config.success}?id=${proposalNo}&code=${productCode}`),
				cancel_url : encodeURIComponent(`${window.location.origin}${This.$config.cancel}/${proposalNo}`)							
			})
		}else{
            //微信支付
			pay({
				data : {openid : data.openid,proposalNo:proposalNo},
				success(res){
					window.location.href = `${This.$config.success}/1?id=${proposalNo}&code=${productCode}`
				},
				cancel(res){
					window.location.href = `${This.$config.cancel}/${proposalNo}`
				},
				fail(res){
					This.$toast('支付失败');
				}
			})
		}
					
	}else{
		this.$toast(res.message)
	}
})

2、通过后端支付接口获取支付所需要的参数 ,成功后跳转到小程序微信支付中间页面 

//小程序支付
export function appletPay(opts){
	let {data,success_url,cancel_url,fail} = opts;
    //根据后端需要设置支付类型为小程序支付
	data.payType = 'weixinspay'
    //调用后端支付接口,获取微信支付参数。包括appid,签名方式等
	getWxPay(data).then(res =>{
		if(res.code == 200){
			let data = encodeURIComponent(JSON.stringify(res.content))
			wx.miniProgram.navigateTo({
				url : `/pages/pay/index?data=${data}&success_url=${success_url}&cancel_url=${cancel_url}`
			})
		}else{
			Toast(res.message)
		}
	})
}

3、在小程序中pay/index.js中获取拿到的支付参数,唤起微信支付 

// pages/pay/index.js
Page({
    /**
     * 页面的初始数据
     */
    data: {
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        /*
        * options.data            支付参数
        * options.success_url     支付成功回调地址
        * options.cancel_url      取消支付回调地址
        */
        const data = JSON.parse(decodeURIComponent(options.data) || "{}");  //支付的参数
        wx.requestPayment(
            {
            "timeStamp":data.timeStamp,
            "nonceStr": data.nonceStr,
            "package": data['package_'],
            "signType": "MD5",
            "paySign": data.paySign,
            "success":function(res){   
                if(res.errMsg == 'requestPayment:ok'){
                    wx.redirectTo({
                        url: `/pages/success/index?weburl=${options.success_url}`
                    })
                    console.log('requestPayment:ok',options.success_url)
                }
            },
            "fail":function(res){
                if(res.errMsg == 'requestPayment:fail cancel'){
                    wx.redirectTo({
                        url:  `/pages/cancel/index?weburl=${options.cancel_url}`
                    })
                    console.log('requestPayment:fail cancel',options.cancel_url)
                }
            },
            "complete":function(res){}
            })
    }
})

4、支付成功或支付失败后跳转的页面,如果是小程序自己的页面直接跳转。如果是外部引入公共的成功或失败页面,则需要在小程序中通过中间页的形式,跳转至相应页面

//通过小程序中间页跳转
// "/pages/success/index"小程序中间页,weburl为实际跳转地址
wx.redirectTo({
    url: `/pages/success/index?weburl=${options.success_url}`
})

在小程序成功页面中监听传入的跳转地址,通过web-view跳转至目标页面

<!--pages/success/index.wxml-->
<web-view src="{{url}}"></web-view>
// pages/success/index.js
Page({
    /**
     * 页面的初始数据
     */
    data: {
        url:''
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        if(options.weburl){
            const weburl = decodeURIComponent(options.weburl)
            this.setData({
                url:weburl
            })
        }
    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {
        wx.reLaunch({
            url: `/pages/index/index`
        })
    }
})

关于微信支付之后 会有专门的文章介绍  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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日志,可以看出不同支付状态的回调上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。下图是支付失败的回调,下图是支付完成的状态。到这里我们就轻松的实现了微信小程序支付功能了。是不是很简单啊,完整的讲解可以看视频。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值