记一次使用支付宝H5支付

这次呢主要是由于部分原因,在小程序中并没有直接使用相关的api支付方式,使用了H5的支付方式,这也是我第一次使用JSAPI来进行支付的相关调用,具体的业务流程是:

判断相关运行环境:

const userAgent = navigator?.userAgent.toLowerCase();
if (userAgent.includes('alipayclient') || userAgent.includes('alipay')) {
	console.log("当前为支付宝客户端");
}
//通过这种方式,来判断当前的运行环境,非支付宝环境就不去运行权限函数

接下来需要进行权限获取

接下来的思路是:通过后端来获取我们的url地址以及权限code,后端会给我们一个接口,会返回给我们一个url链接地址以及其携带的code,此时,我们需要跳转到携带code的链接地址中,来获取code以及进入支付宝的相关支付环境,所以这里就涉及到了

 1、获取携带code的链接地址,并跳转

 2、拿到我们的code、并且要进入当前url中(支付宝相关支付环境)

 3、请求登录权限,保存token授权成功

 4、需要拉取支付

在这里的具体思路是这个样子

接下来就是:

const valAuthInfo = async (code:string,mid:number) => {
    if (code) {
		//请求获取授权当前身份
		const res : any = await getAuthInfo({
			code_id: 0,
			mid: mid,
			auth_client: 4,
			code: code, //code码
	    })
	    if (res.code === 0) {
		    authSuccess(res)
	    }
    }
    if (!code) {
		const res : any = await getAuthUrl({
			code_id: 0,
			mid: mid,
			auth_client: 4,
			url: window.location.href
		})
		if (res.code === 0) {
			location.href = (res.data.auth_url)
		}
	}
}

然后authSuccess是保存用户状态的函数以及手机号绑定:

const authSuccess = (res : any) => {
		uni.setStorageSync('openid', res.data.openid);
		uni.setStorageSync('unionid', res.data.unionid);
		if (res.data.is_bind == 1) {
			uni.setStorageSync('token', res.data.token);
			uni.showToast({
				title: '登录成功~',
				icon: 'none'
			});
		}
		if (res.data.is_bind == 0) {
			uni.showToast({
				title: '还未绑定手机号~',
				icon: 'none'
			});
			uni.navigateTo({
				url: "/pages/bindPhone/index"
			})
		}
	}

加下来权限部分就处理完成,然后处理支付部分

首先需要进行预支付:

const res : any = await creatOrder({
			cart_id: idList.value,
			merchant_id: merchant_id.value,
			user_coupon_id: coupon_id.value,
			desk_id: desk_id.value,
			pay_type: pay_client.value,
			pay_client: info,
			openid: uni.getStorageSync('openid')
		})
		if (res.code === 0) {
			requestPayment(res.data)
		}

然后进行支付拉取:

const requestPayment = (info : any) => {

if (state.pay_client == "4") {
			function ready(callback : any) {
				Toast.success(callback)
				if (window.AlipayJSBridge) {
					callback && callback();
				} else {
					document.addEventListener('AlipayJSBridgeReady', callback, false);
				}
			}
			ready(function () {
				AlipayJSBridge.call("tradePay", {
					tradeNO: info.pay_url
				}, function (result : any) {
					Toast.success(result)
					if (result.resultCode == 9000) {
						Toast.success('支付成功')
					} else {
						Toast.error(result)
					}
				});
			});

}

这里的info是预下单的单号至此,支付宝支付就已经完成了

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值