uniapp 小程序 支付逻辑处理

uniapp 小程序 支付逻辑处理

  1. 上代码如果你不需要支付宝适配,可以删除掉支付宝的条件判断代码
javascript 复制代码
    <button class="subBtn" :disabled="submiting" @click="goPay">
      去支付
    </button>
javascript 复制代码
   // 以下代码你需要改的地方
   // 1.  order/app/v1/order/waitPayToPay 更换自己的支付接口
   // 2.  修改接口传参
   // 3.  修改接口返回的的各种状态码,并处理逻辑
   // 4.  请更换为你的模版id
   // 5.  更换跳转页面的路由
	export default {
	 data() {
	   return {
	     submiting: false,
	   };
	 },
     methods: {
       goPay() {
	      if (this.submiting) {
	        return;
	      }
	      uni.showLoading({ title: "发起支付..." });
	      this.submiting = true;
	      // 调用接口
	      this.$uniApi
	        .dataRequestYesLoading(
	          "POST",
	          "order/app/v1/order/waitPayToPay",
	          {
	            // #ifdef MP-WEIXIN
	            payChannel: "",
	            // #endif
	            // #ifdef MP-ALIPAY
	            payChannel: "alipay_mini",
	            // #endif
	            orderSource: 5, //小程序
	            orderId: this._orderId,
	            buyerMemo: this.memberRemark, //备注
	            // #ifdef MP-WEIXIN
	            seriesNumber:
	              uni.getStorageSync("userInfor").openId ||
	              uni.getStorageSync("wxopenid"), //订单序列号
	            // #endif
	            // #ifdef MP-ALIPAY
	            seriesNumber: uni.getStorageSync("userInfor").zfbUserId, //订单序列号
	            // #endif
	          },
	          "支付中"
	        )
	        .then((data) => {
	          if (data.code == 18018 || data.code == 18019 || data.code == 18020) {
	            //该优惠券无法使用
	            // this.orderEnsure();
	           //  this.openPopup();
	           //请根据自己的需求 处理此处逻辑
	            this.submiting = false;
	            uni.hideLoading();
	            return;
	          }
	          // 我的接口成功的时候 返回的是1
	          if (data.code !== 1) {
	            uni.hideLoading();
	            this.submiting = false;
	            this.$util.showToast(data.msg);
	            return;
	          }
	          //微信支付
	          uni.requestPayment({
	            // #ifdef MP-WEIXIN
	            timeStamp: data.data.timeStamp,  // String类型,支付签名时间戳,需与后台统一
	            nonceStr: data.data.nonceStr,  // String类型,支付签名随机串,需与后台统一
	            package: `prepay_id=${data.data.prepayid}`,  // String类型,统一下单接口返回的 prepay_id 参数值,格式如:prepay_id=xxx
	            signType: data.data.signType, // String类型,签名方式,默认为 "MD5" ,仅支持 "MD5" 和 "HMAC-SHA256"
	            paySign: data.data.pay_sign, // String类型,签名,具体签名方案参考微信支付开发文档
	            // #endif
	            // #ifdef MP-ALIPAY
	            orderInfo: data.data.tradeNo,
	            // #endif
	            success: (success) => {  // 接口调用成功的回调函数
	              console.log(success);
	              // #ifdef MP-ALIPAY
	              let resultCode = success.resultCode;
	              if (
	                resultCode == 6001 ||
	                resultCode == 4000 ||
	                resultCode == 6002
	              ) {
	                // 操作失败 时 逻辑处理
	                return;
	              }
	              // 用户订阅操作 订阅后 用户可在微信收到支付信息等
	              // #endif
	              this.wxInForm([
	                  "YUjKUVJIRah0xxxxxxxxxxxxxxxxxxxxxxxxx5CE8CVuM",  // 这是订阅模版id 请更换为你的模版id
	                ])
	                .then((res) => {
	                 // 订阅成功后 跳转到指定页面
	                  uni.redirectTo({
	                    url: '../order_pay/order_pay',,
	                  });
	                })
	                .catch((err) => {
	                 // 不订阅 跳转到指定页面
	                  uni.redirectTo({
	                    url: '../order_pay/order_pay',
	                  });
	                });
	
	              this.submiting = false;
	            },
	            fail: (err) => { //接口调用失败的回调函数
	              console.log("fail:" + JSON.stringify(err));
	              this.submiting = false;
	              // 支付失败处理
	            },
	          });
	        });
	    },
	    // 改方法最好写在vuex中
	    wxInForm(tmplIds){
			return new Promise(resolve => {
				uni.requestSubscribeMessage({
					tmplIds:tmplIds,  // 订阅模版id
					success(res){
						resolve()
					},
					fail(res){
						resolve()
					}
				})
			})
		},
      }
	}
  1. 完成!
相关推荐
kyh10033811205 分钟前
可商用去水印微信小程序源码(免费获取全部源码)
微信小程序·小程序·微信小游戏·去水印·去水印工具·微信去水印小程序
2501_915106322 小时前
H5 混合应用加密实践,从明文资源到安全 IPA 的多层防护体系
android·安全·ios·小程序·uni-app·iphone·webview
todoitbo2 小时前
时序数据库选型实战指南:国产时序数据库Apache IoTDB的技术对比与实践
数据库·apache·时序数据库·iotdb·国产
iOS阿玮2 小时前
苹果开发者后台叕挂了,P0级别的报错!
uni-app·app·apple
浮桥2 小时前
uniapp开发公众号,实现回到顶部功能
uni-app
我命由我123452 小时前
微信小程序 - 页面返回并传递数据(使用事件通道、操作页面栈)
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
半开半落2 小时前
uniapp微信小程序端接收ai模型返回的SSE流式数据
微信小程序·小程序·uni-app·ai模型
2501_916007472 小时前
在 CICD 中实践 Fastlane + Appuploader 命令行,构建可复制的 iOS 自动化发布流程
android·运维·ios·小程序·uni-app·自动化·iphone
一匹电信狗3 小时前
【Linux我做主】进程实践:手动实现Shell
linux·运维·服务器·c++·ubuntu·小程序·开源
qq_316837753 小时前
uniapp 缓存指定接口的响应,在无网络时使用缓存数据
前端·uni-app