当前位置:   article > 正文

记一次使用支付宝H5支付_支付宝获取code

支付宝获取code

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

判断相关运行环境:

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

接下来需要进行权限获取

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

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

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

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

 4、需要拉取支付

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

接下来就是:

  1. const valAuthInfo = async (code:string,mid:number) => {
  2. if (code) {
  3. //请求获取授权当前身份
  4. const res : any = await getAuthInfo({
  5. code_id: 0,
  6. mid: mid,
  7. auth_client: 4,
  8. code: code, //code码
  9. })
  10. if (res.code === 0) {
  11. authSuccess(res)
  12. }
  13. }
  14. if (!code) {
  15. const res : any = await getAuthUrl({
  16. code_id: 0,
  17. mid: mid,
  18. auth_client: 4,
  19. url: window.location.href
  20. })
  21. if (res.code === 0) {
  22. location.href = (res.data.auth_url)
  23. }
  24. }
  25. }

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

  1. const authSuccess = (res : any) => {
  2. uni.setStorageSync('openid', res.data.openid);
  3. uni.setStorageSync('unionid', res.data.unionid);
  4. if (res.data.is_bind == 1) {
  5. uni.setStorageSync('token', res.data.token);
  6. uni.showToast({
  7. title: '登录成功~',
  8. icon: 'none'
  9. });
  10. }
  11. if (res.data.is_bind == 0) {
  12. uni.showToast({
  13. title: '还未绑定手机号~',
  14. icon: 'none'
  15. });
  16. uni.navigateTo({
  17. url: "/pages/bindPhone/index"
  18. })
  19. }
  20. }

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

首先需要进行预支付:

  1. const res : any = await creatOrder({
  2. cart_id: idList.value,
  3. merchant_id: merchant_id.value,
  4. user_coupon_id: coupon_id.value,
  5. desk_id: desk_id.value,
  6. pay_type: pay_client.value,
  7. pay_client: info,
  8. openid: uni.getStorageSync('openid')
  9. })
  10. if (res.code === 0) {
  11. requestPayment(res.data)
  12. }

然后进行支付拉取:

  1. const requestPayment = (info : any) => {
  2. if (state.pay_client == "4") {
  3. function ready(callback : any) {
  4. Toast.success(callback)
  5. if (window.AlipayJSBridge) {
  6. callback && callback();
  7. } else {
  8. document.addEventListener('AlipayJSBridgeReady', callback, false);
  9. }
  10. }
  11. ready(function () {
  12. AlipayJSBridge.call("tradePay", {
  13. tradeNO: info.pay_url
  14. }, function (result : any) {
  15. Toast.success(result)
  16. if (result.resultCode == 9000) {
  17. Toast.success('支付成功')
  18. } else {
  19. Toast.error(result)
  20. }
  21. });
  22. });
  23. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/700388
推荐阅读
相关标签
  

闽ICP备14008679号