使用webview内嵌的H5项目怎么调起H5支付,包含在app环境下中调起微信支付

最近有一个需求是需要我们把我们的项目打包成H5项目,在甲方的小程序内和APP内试使用

调起微信支付踩了很多坑,在微信内置浏览器以及小程序的webView页面内使用H5支付会展示:请在外部浏览器打开,使用微信公众号也就是(jsapi)支付时,使用wx.chooseWXPay依然会调不起微信支付,才知道没有申请公众号,因此在有甲方能够配合的情况下,最简单的方法就是:
在小程序内放一个空白的支付页面,在小程序内的webview打开我们的小程序到支付流程时跳转小程序的空白支付页拉起支付,支付成功或失败时继续跳转回我们的待支付页面
只需要在空白页面调用小程序的官方api的requestPayment方法就行,参数从我们的h5的页面调用下单接口返回的参数,跳转小程序空白支付页时带上就行。

在app中调起支付还是使用的是H5支付,需要在H5项目中判断是微信内置还是外部浏览器。

在H5项目的下单页面的点击支付方法中

// #ifdef H5
	let linkUrl = data.mwebUrl;    //下单接口返回的mwebUrl,后台处理了链接,将时间戳等一些参数拼接后返回
	//encodeURIComponent转译,避免某些字符传参被限制
	let redirectUrl = '&redirect_url=' +encodeURIComponent(打包后h5页面的下单页面的链接)
	// 首先判断是否是微信内置浏览器,然后再去判断机型android iOS
	var uExplorer = window.navigator.userAgent.toLowerCase()
	//微信内置环境
	if (/micromessenger/.test(uExplorer)) {
		wx.miniProgram.getEnv((res)=>{   
			if (res.miniprogram) {
				//在微信内,在小程序内。
				data.orderId = this.orderId;    //把H5页面的订单ID带着便于支付完成后返回当前H5订单页面查看支付详情
				 // 在小程序内打开此h5页面会返回小程序的参数
				let wxParam = JSON.stringify(data) 
				//跳转小程序的空白支付页面
				wx.miniProgram.navigateTo({url: "/pages/payment/payParams?param="+wxParam});
				return
			}else{
				//在微信内置浏览器,不在小程序里
				console.log("不支持当前调起的支付方式")
				return
			}
		})
	} else {
		const system = uni.getSystemInfoSync()
		//在ios的外部浏览器或者在ios的App中调起h5支付后重定向返回当前下单的h5页面
		if (system.platform == 'ios') {
			window.location.href = linkUrl+redirectUrl
		} else {
			//在android的外部浏览器或者在android的App中调起h5支付
			window.open(linkUrl+redirectUrl)
		}
	}
// #endif

放在小程序里的空白支付页面,直接调用小程序支付

<template>
	<view>
		<web-view :src="pageUrl" v-if="pageUrl">
		</web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				pageUrl:''
			}
		},
		onLoad(options){
			if(options.param){
				this.param = JSON.parse(options.param)
				this.pay(this.param)
			}
		},
		methods: {
			pay(data){
				var that = this;
				uni.requestPayment({
					provider: 'wxpay',
					timeStamp: data.timestamp,
					nonceStr: data.noncestr,
					package:  data.package,
					signType: 'MD5',
					paySign: data.sign,
					success(res) {
						uni.showToast({
							title: '微信支付成功',
						})
						// 测试
						that.pageUrl = H5下单页面的链接+订单号;
					},
					fail(res) {
						uni.showToast({
							title: '微信支付失败',
							icon: 'none'
						})
						that.pageUrl = H5下单页面的链接+订单号;
					},
					complete(res) {
						
					}
				})
			}
		}
	}
</script>



这样实现的微信支付给用户的操作感受比较良好,即使在小程序内空白页调起支付也不会有不流畅的感觉,因为拉起支付后屏幕会出现一层黑色的图层,支付完成或失败后都返回的是之前的H5下单页面,想要重新支付那么就重新点击H5页面的支付按钮会重复以上流程。
用H5调起微信支付就这么完成了,可在APP(Android&iOS)中嵌套H5进行拉取H5支付,也可在小程序内跳转H5页面进行微信支付。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值