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. 完成!
相关推荐
郭wes代码11 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
web1508509664113 小时前
在uniapp Vue3版本中如何解决webH5网页浏览器跨域的问题
前端·uni-app
s甜甜的学习之旅16 小时前
Apache POI练习代码
apache
是小崔啊16 小时前
开源轮子 - Apache Common
java·开源·apache
计算机徐师兄21 小时前
基于TP5框架的家具购物小程序的设计与实现【附源码、文档】
小程序·php·家具购物小程序·家具购物微信小程序·家具购物
曲辒净1 天前
微信小程序实现二维码海报保存分享功能
微信小程序·小程序
程序猿阿伟1 天前
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
java·spark-ml·apache
朽木成才1 天前
小程序快速实现大模型聊天机器人
小程序·机器人
peachSoda71 天前
随手记:小程序使用uni.createVideoContext视频无法触发播放
小程序
何极光1 天前
uniapp小程序样式穿透
前端·小程序·uni-app