| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- import { APPID, USERCODE, USE_PRIVATEKEY, MYpublicKey } from '../../config_sand.js';
- import util from '../../utils_sand/util.js';
- Page({
- data: {
- wechatData: null,
- orderNo: '',
- msg: '',
- sandpay: '',
- backing: true,
- },
- onLoad(options) {
- const { orderNo, back } = options;
- this.setData({ orderNo: orderNo || '' });
- if (back) this.setData({ backing: false });
- // Try cached order
- const cacheKey = `order_${orderNo}`;
- const cached = wx.getStorageSync(cacheKey);
- if (cached) {
- console.log('[Cache] Found cached payment data for', orderNo, cached);
- this.setData({ wechatData: cached });
- this.composeAndPay();
- } else if (orderNo) {
- this.initiateLogin(orderNo);
- } else {
- util.Tips({ title: '无效的订单号' });
- }
- },
- initiateLogin(orderNo) {
- wx.login({
- success: ({ code }) => this.fetchOpenId(code, orderNo),
- fail: () => util.Tips({ title: '微信登录失败' }),
- });
- },
- fetchOpenId(code, orderNo) {
- if (!orderNo) return util.Tips({ title: '订单号缺失' });
- wx.request({
- url: `https://gbyy91.com/api/efps/wechat/miniapp/auth?code=${code}`,
- method: 'POST',
- success: res => {
- const { statusCode, data } = res;
- if (statusCode === 200 && data.success) {
- this.createOrder(orderNo, data.openid);
- } else {
- util.Tips({ title: `获取OpenID失败:${data.msg || statusCode}` });
- }
- },
- fail: err => util.Tips({ title: `获取OpenID错误:${err}` }),
- });
- },
- createOrder(orderNo, openId) {
- wx.request({
- url: `https://gbyy91.com/api/web/wechatMiniAppPay?orderNo=${orderNo}&openId=${openId}`,
- method: 'POST',
- success: res => {
- const { statusCode, data } = res;
- if (statusCode === 200 && data.code === 200) {
- let outputJSON;
- try {
- outputJSON = JSON.parse(data.data.outputJSON);
- } catch (e) {
- return util.Tips({ title: `解析响应失败:${data.msg}` });
- }
- const { returnCode, returnMsg } = outputJSON;
- if (returnCode === '0000') {
- this.cacheOrder(this.data.orderNo, outputJSON);
- this.setData({ wechatData: outputJSON });
- this.composeAndPay();
- } else {
- util.Tips({ title: `创建订单失败:${returnMsg}` });
- }
- } else {
- util.Tips({ title: `下单失败:${data.msg}` });
- }
- },
- fail: err => util.Tips({ title: `下单错误:${err}` }),
- });
- },
- cacheOrder(orderNo, data) {
- try {
- const key = `order_${orderNo}`;
- wx.setStorageSync(key, data);
- console.log('[Cache] 保存订单', key, data);
- } catch (e) {
- console.warn('缓存订单失败', e);
- }
- },
- clearOrderCache(orderNo) {
- try {
- const key = `order_${orderNo}`;
- wx.removeStorageSync(key);
- console.log('[Cache] 清除订单缓存', key);
- } catch (e) {
- console.warn('清除订单缓存失败', e);
- }
- },
- launchAppError(e) {
- wx.showToast({ title: '跳回 App 失败', icon: 'none' });
- },
- composeAndPay() {
- const payData = this.data.wechatData.wxJsapiParam;
- if (!payData) return util.Tips({ title: '支付参数缺失' });
- wx.showLoading({ title: '加载中' });
- wx.hideLoading();
- try {
- wx.requestPayment({
- timeStamp: payData.timeStamp,
- nonceStr: payData.nonceStr,
- package: payData.package,
- signType: payData.signType,
- paySign: payData.paySign,
- success: () => {
- this.setData({ msg: '0000', back: true, sandpay: 'success' });
- this.clearOrderCache(this.data.orderNo);
- },
- fail: err => {
- console.error('支付失败', err);
- this.setData({ msg: '9999', back: true, sandpay: 'fail' });
- },
- complete: () => {},
- });
- } catch {
- this.setData({ msg: redirectUrl, sandpay: 'fail' });
- }
- },
- });
|