my-uniapp-tools
Version:
一个简洁稳定的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能
2 lines (1 loc) • 1.9 kB
JavaScript
;var e=require("../core.cjs");const r=e.ErrorHandler.getInstance(),t="WECHAT_PAY_INVALID_CONFIG";exports.wechatH5Pay=(s,n={})=>{const i=n&&"object"==typeof n?n:{},o=!1!==i.reportError,a="number"==typeof i.timeoutMs&&Number.isFinite(i.timeoutMs)&&i.timeoutMs>0?i.timeoutMs:1e4;return new Promise(n=>{let i=!1,c=null;const d=e=>{i||(i=!0,c&&(clearTimeout(c),c=null),n(e))},u=(t,s,n=null)=>{const i=new e.UniAppToolsError(t,s,"payment");return o&&r.handleError(i,"payment"),{success:!1,status:"error",code:t,message:s,raw:n}};if(!(s&&"object"==typeof s&&s?.appId&&s?.timeStamp&&s?.nonceStr&&s?.package&&s?.signType&&s?.paySign))return void d(u(t,"微信支付配置参数不完整"));if("string"!=typeof s.package||!s.package.startsWith("prepay_id="))return void d(u(t,"微信支付 package 格式非法,应以 'prepay_id=' 开头"));if("undefined"==typeof window||!window.navigator)return void d(u("WECHAT_PAY_ENV_ERROR","不在浏览器环境中,无法调用微信支付"));const _=()=>{try{window.WeixinJSBridge.invoke("getBrandWCPayRequest",s,e=>{"get_brand_wcpay_request:ok"===e.err_msg?d({success:!0,status:"success",code:"WECHAT_PAY_SUCCESS",message:"支付成功",raw:e}):"get_brand_wcpay_request:cancel"===e.err_msg?d({success:!1,status:"cancel",code:"WECHAT_PAY_CANCEL",message:"用户取消支付",raw:e}):d({success:!1,status:"error",code:"WECHAT_PAY_FAIL",message:e.err_desc||"支付失败",raw:e})})}catch(e){d(u("WECHAT_PAY_INVOKE_ERROR",`调用微信支付接口失败: ${e instanceof Error?e.message:String(e)}`))}};if(void 0===window.WeixinJSBridge){const e=()=>{_(),window.document.removeEventListener("WeixinJSBridgeReady",e,!1)};c=setTimeout(()=>{window.document.removeEventListener("WeixinJSBridgeReady",e,!1),d(u("WECHAT_PAY_READY_TIMEOUT","等待微信支付环境就绪超时"))},a),window.document.addEventListener("WeixinJSBridgeReady",e,!1)}else _()})};