Files
yusheng-h5/unpackage/dist/build/web/assets/pages-other-weChatPay.BWrE2uLc.js
2026-01-09 19:01:04 +08:00

2 lines
8.8 KiB
JavaScript

import{g as e,z as t,a5 as a,s,c as n,P as o,x as i,y 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 _,E as S,t as P,B as C,_ as A,ag as I,G as b,ah as k,ai as T,l as W}from"./index-759PoYgM.js";import{_ as D}from"./uni-easyinput.C4HErVdH.js";import{r as j}from"./uni-app.es.Hulr8kk-.js";import{n as E}from"./nav.BBjj-z52.js";import{_ as v}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./uni-icons.BNs6RC_T.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 console.error("验证支付结果失败:",t),!1}}};const J=v({components:{navBar:E},data:()=>({baseBgUrl:n.new_unionUrl||"",unionBgUrl:n.unicon_url||"",statusBarHeight:0,ThemeData:null,searchValue:"",Coin:"/h5/web/assets/coin-tLYa0maw.png",moneyList:[{coin:300,money:3},{coin:500,money:5},{coin:1e3,money:10},{coin:1500,money:15},{coin:2e3,money:20},{coin:3e3,money:30},{coin:5e3,money:50},{coin:1e4,money:100}],selectedIndex:-1,selectedAmount:0,selectedCoin:0,isPaying:!1,isAgreed:!1}),onLoad(){this.initWxPay()},methods:{async initWxPay(){try{await B.initWxJsSDK()}catch(e){console.error("初始化微信支付失败:",e)}},selectAmount(e){this.selectedIndex=e,this.selectedAmount=this.moneyList[e].money,this.selectedCoin=this.moneyList[e].coin},handleAgreementChange(e){this.isAgreed=e.detail.value.length>0},showAgreement(){o({title:"充值协议",content:"1. 充值前请确认您已满18周岁\n2. 充值金额一经充值成功,不支持退款\n3. 请勿通过非官方渠道充值,谨防上当受骗\n4. 充值遇到问题请联系客服处理\n5. 本平台保留最终解释权",confirmText:"我知道了",showCancel:!1})},async handlePay(){if(this.searchValue&&""!==this.searchValue.trim())if(-1!==this.selectedIndex)if(this.isAgreed){if(!this.isPaying){this.isPaying=!0,i({title:"正在发起支付...",mask:!0});try{const e=this.generateOrderNo(),a=Math.round(100*this.selectedAmount),s=JSON.stringify({userId:this.searchValue.trim(),coin:this.selectedCoin}),n=await B.pay(a,e,s);r(),n.success?(t({title:"支付成功",icon:"success",duration:2e3}),setTimeout((()=>{this.handlePaySuccess()}),2e3)):t({title:n.message||"支付失败",icon:"none",duration:2e3})}catch(e){r(),console.error("支付错误:",e);let a="支付失败";e.message&&(a=e.message.includes("取消")?"您已取消支付":e.message),t({title:a,icon:"none",duration:2e3})}finally{this.isPaying=!1}}}else t({title:"请先阅读并同意充值协议",icon:"none",duration:2e3});else t({title:"请选择充值金额",icon:"none",duration:2e3});else t({title:"请输入您在羽声语音的ID",icon:"none",duration:2e3})},generateOrderNo:()=>`YS${Date.now()}${Math.floor(1e4*Math.random()).toString().padStart(4,"0")}`,handlePaySuccess(){this.selectedIndex=-1,this.selectedAmount=0,this.selectedCoin=0,this.isAgreed=!1}}},[["render",function(e,t,a,s,n,o){const i=c("navBar"),r=j(l("uni-easyinput"),D),E=m,v=A,$=I,B=b,J=k,V=T;return p(),d(E,{class:"view-page",style:h({backgroundImage:`url('${n.ThemeData?n.ThemeData.app_bg:n.baseBgUrl}')`})},{default:u((()=>[y(i,{style:h({marginTop:`${n.statusBarHeight}${"ios"===g().platform?"px":"dp"}`}),navTitle:"羽声充值",isLeftSlot:!0},null,8,["style"]),y(E,{class:"content"},{default:u((()=>[y(E,{class:""},{default:u((()=>[y(r,{prefixIcon:"search",clearSize:"18",modelValue:n.searchValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.searchValue=e),placeholder:"请输入您在羽声语音的ID"},null,8,["modelValue"])])),_:1}),y(E,{class:"show_ByIdView"},{default:u((()=>[y(E,{class:""},{default:u((()=>[f(" 余额 ")])),_:1}),y(E,{class:""},{default:u((()=>[f(" 金币 ")])),_:1})])),_:1}),y(E,{class:"coinWrap"},{default:u((()=>[(p(!0),w(_,null,x(n.moneyList,((e,t)=>(p(),d(E,{class:S(["coinBox",{selected:n.selectedIndex===t}]),key:t,onClick:e=>o.selectAmount(t)},{default:u((()=>[y(E,{class:"w-fill coin"},{default:u((()=>[W("img",{style:{width:"40rpx",height:"40rpx"},src:n.Coin,alt:""},null,8,["src"]),f(P(e.coin),1)])),_:2},1024),y(E,{class:"w-fill money"},{default:u((()=>[f(" ¥"+P(e.money),1)])),_:2},1024)])),_:2},1032,["class","onClick"])))),128))])),_:1}),y(E,{class:"text-wrap"},{default:u((()=>[y(E,{class:"",style:{"margin-bottom":"20rpx"}},{default:u((()=>[f(" 充值小贴士: ")])),_:1}),y(E,{class:"font-24",style:{"margin-bottom":"20rpx"}},{default:u((()=>[f(" 1.为避免您的账号及资金被冻结,请勿通过非官方渠道 充值,谨防上当受损! ")])),_:1}),y(E,{class:"font-24"},{default:u((()=>[f(" 2.充值前请确定您已满18周岁 ")])),_:1})])),_:1}),y(E,{class:"pay-button-wrap"},{default:u((()=>[y(v,{class:S(["pay-button",{disabled:-1===n.selectedIndex||n.isPaying||!n.isAgreed}]),disabled:-1===n.selectedIndex||n.isPaying||!n.isAgreed,onClick:o.handlePay},{default:u((()=>[f(P(n.isPaying?"支付中...":"立即支付"),1)])),_:1},8,["class","disabled","onClick"]),y(E,{class:"agreement-wrap"},{default:u((()=>[y(V,{onChange:o.handleAgreementChange},{default:u((()=>[y(J,{class:"agreement-label"},{default:u((()=>[y($,{checked:n.isAgreed,color:"#3ABC6D",style:{transform:"scale(0.8)"}},null,8,["checked"]),y(B,{class:"agreement-text"},{default:u((()=>[f("我已阅读并同意")])),_:1}),y(B,{class:"agreement-link",onClick:C(o.showAgreement,["stop"])},{default:u((()=>[f("《充值协议》")])),_:1},8,["onClick"])])),_:1})])),_:1},8,["onChange"])])),_:1})])),_:1})])),_:1})])),_:1},8,["style"])}],["__scopeId","data-v-1a9fb82e"]]);export{J as default};