Files
yusheng-h5/unpackage/dist/build/web/assets/pages-other-weChatPay.C30bZxuB.js

2 lines
8.8 KiB
JavaScript
Raw Normal View History

2026-01-08 16:06:53 +08:00
import{g as e,K as t,a5 as a,s,c as n,P as o,D as i,E as r,r as c,e as l,f as d,w as u,i as h,j as m,o as p,k as y,b as g,p as f,q as w,u as x,F as _,B as S,t as P,y as C,_ as A,ag as I,C as b,ah as k,ai as T,l as W}from"./index-BifMHC6c.js";import{_ as D}from"./uni-easyinput.CmmQ9HCd.js";import{r as j}from"./uni-app.es.BM6_Rfsu.js";import{n as E}from"./nav.CvI0lGd-.js";import{_ as v}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./uni-icons.CP-9I_4O.js";const $="https://yourdomain.com/api";const B=new class{constructor(){this.isWeixin=this.checkWeixin(),this.openid=e("wx_openid")||""}checkWeixin(){return-1!==navigator.userAgent.toLowerCase().indexOf("micromessenger")}getQueryParam(e){const t=new RegExp("(^|&)"+e+"=([^&]*)(&|$)","i"),a=window.location.search.substr(1).match(t);return null!=a?decodeURIComponent(a[2]):null}async wxAuth(){if(!this.isWeixin)return t({title:"请在微信中打开",icon:"none"}),null;const e=this.getQueryParam("code");if(!e){const e=encodeURIComponent(window.location.href.split("#")[0]),t=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.appId}&redirect_uri=${e}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`;return window.location.href=t,null}return e}async getOpenId(e){try{const t=await a({url:`${$}/wx/auth`,method:"GET",data:{code:e}});if(0===t[1].data.code){const{openid:e}=t[1].data.data;return this.openid=e,s("wx_openid",e),e}return null}catch(t){return console.error("获取openid失败:",t),null}}async initWxJsSDK(){if(!this.isWeixin)return!1;try{const e=window.location.href.split("#")[0],s=await a({url:`${$}/jssdk/config`,method:"GET",data:{url:encodeURIComponent(e)}});if(0===s[1].data.code){const e=s[1].data.data;return await this.loadWxJsSDK(),wx.config({debug:!1,appId:e.appId,timestamp:e.timestamp,nonceStr:e.nonceStr,signature:e.signature,jsApiList:["chooseWXPay","onMenuShareTimeline","onMenuShareAppMessage","scanQRCode"]}),new Promise((e=>{wx.ready((()=>{console.log("微信 JS-SDK 初始化成功"),e(!0)})),wx.error((a=>{console.error("微信 JS-SDK 初始化失败:",a),t({title:"微信初始化失败",icon:"none"}),e(!1)}))}))}return!1}catch(e){return console.error("初始化JS-SDK失败:",e),!1}}loadWxJsSDK(){return new Promise(((e,t)=>{if("undefined"!=typeof wx)return void e();const a=document.createElement("script");a.src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js",a.onload=e,a.onerror=t,document.head.appendChild(a)}))}async createPayment(e){try{if(!this.openid){const e=await this.wxAuth();e&&await this.getOpenId(e)}if(!this.openid)throw new Error("获取用户信息失败");const t=await a({url:`${$}/wxpay/unifiedorder`,method:"POST",header:{"Content-Type":"application/json"},data:{openid:this.openid,body:e.body||"账户充值",total_fee:e.amount,out_trade_no:e.orderNo,attach:e.attach||""}});if(0===t[1].data.code)return t[1].data.data;throw new Error(t[1].data.msg||"创建订单失败")}catch(t){throw console.error("创建支付订单失败:",t),t}}async launchPayment(e){return new Promise(((t,a)=>{wx.chooseWXPay({timestamp:e.timeStamp,nonceStr:e.nonceStr,package:e.package,signType:e.signType,paySign:e.paySign,success:e=>{"chooseWXPay:ok"===e.errMsg?t({success:!0,message:"支付成功"}):a(new Error("支付失败: "+e.errMsg))},fail:e=>{a(new Error("支付失败: "+JSON.stringify(e)))},cancel:()=>{a(new Error("用户取消支付"))}})}))}async pay(e,a,s=""){try{if(!this.isWeixin)return t({title:"请在微信中打开",icon:"none"}),{success:!1,message:"非微信环境"};if(!(await this.initWxJsSDK()))return{success:!1,message:"微信初始化失败"};const n=await this.createPayment({amount:e,orderNo:a,attach:s}),o=await this.launchPayment(n);return o.success?(await this.verifyPayment(a),{success:!0,message:"支付成功"}):o}catch(n){return console.error("支付流程错误:",n),{success:!1,message:n.message||"支付失败"}}}async verifyPayment(e){try{const t=await a({url:`${$}/wxpay/query`,method:"GET",data:{out_trade_no:e}});if(0===t[1].data.code){if("SUCCESS"===t[1].data.data.trade_state)return!0}return!1}catch(t){return consol