Parcourir la source

wx pay with bug

Zhengxiaowei il y a 5 ans
Parent
commit
8d093cb806

+ 12 - 2
src/api/index.js

@@ -95,8 +95,13 @@ export const deleteShelfBook = params => {
   return fly.get(`/userShelfBooks/delete`, params);
 };
 
-// 充值
-export const getConfigOfWxPay = (params) => {
+// 充值h5
+export const getConfigOfWxH5Pay = (params) => {
+  return fly.get("/goToH5Pay", params);
+};
+
+// 充值app
+export const getConfigOfWxAppPay = (params) => {
   return fly.get("/goToPay", params);
 };
 
@@ -124,3 +129,8 @@ export const userBind = params => {
 export const userSign = () => {
   return fly.get(`/sign`);
 };
+
+// 查询微信支付订单的成功性 - h5
+export const checkWxOrder = (order) => {
+  return fly.get("/checkOrder", { order: order })
+}

+ 1 - 1
src/api/utils.js

@@ -66,7 +66,7 @@ const refreshToken = () => {
       token: token.token
     }, {
         headers: {
-          a: 1
+          Authorization: token.token
         }
       })
     .then(r => {

+ 5 - 0
src/components/loading/loading.ux

@@ -1,5 +1,6 @@
 <template>
   <div class="loading-wrap">
+    <progress type="circular" if="!empty"></progress>
     <text>{{text}}</text>
   </div>
 </template>
@@ -10,6 +11,10 @@ export default {
     text: {
       type: String,
       default: "加载ing..."
+    },
+    empty: {
+      type: Boolean,
+      default: false
     }
   },
 }

+ 65 - 29
src/helper/index.js

@@ -1,7 +1,7 @@
 
 import wxpay from '@service.wxpay';
 import alipay from '@service.alipay';
-import { getConfigOfWxPay, getConfigOfAliPay } from "../api";
+import { getConfigOfWxH5Pay, getConfigOfWxAppPay, getConfigOfAliPay } from "../api";
 
 export const pageLoad = (meta, fn, params) => {
   return new Promise(async (resolve, reject) => {
@@ -20,55 +20,91 @@ export const pageLoad = (meta, fn, params) => {
 
 // 支付配置
 export const configWxPay = async (params) => {
-  let config = await getConfigOfWxPay(params);
-  console.log("pay config", config);
-  let prepayid = config.prepay_id;
-  // app中的配置信息
-  let extraAppConfig = {
-    app_id: config.appId,
-    partner_id: "",
-    package_value: "",
-    nonce_str: config.nonce_str,
-    time_stamp: "",
-    order_sign: config.sign
-  }
-  // web端的配置信息
-  let extraWebConfig = {
-    mweb_url: "http://www.baidu.com"
-  }
   let payType = wxpay.getType();
   let ret = null;
   console.log(payType);
   // return;
   switch (payType) {
-    case "APP": ret = await useWxPay(prepayid, extraAppConfig); break;
-    case "MWEB": ret = await useWxPay(prepayid, extraWebConfig); break;
+    case "APP":
+      try {
+        ret = await useWxAppPay(params);
+      } catch (e) {
+        ret = e;
+      };
+      break;
+    case "MWEB":
+      try {
+        ret = await useWxH5Pay(params);
+      } catch (e) {
+        console.log("e", e);
+        ret = e;
+      };
+      break;
     default: ret = "app not install or wx pay is not avaliable";
   }
 
-  console.log(ret);
+  return ret;
+}
+
+// h5支付
+let useWxH5Pay = (params) => {
+  return new Promise(async (resolve, reject) => {
+    let config = await getConfigOfWxH5Pay(params);
+    let extra = {
+      mweb_url: config.mweb_url + "&redirect_url=" + encodeURIComponent("https://kyy.aizhuishu.com/testp")
+    }
+    console.log(extra);
+    wxpay.pay({
+      prepayid: config.prepay_id,
+      referer: "https://kyy.aizhuishu.com",
+      extra: extra,
+      success: (data) => {
+        console.log("success", data);
+        // app中返回prepayid web中返回final_url
+        resolve({ code: "0", data: data, order: config.trade_no, message: "订单已经提交" });
+      },
+      fail: (data, code) => {
+        console.log("error");
+        console.log(data, code);
+        reject({ code: code, data: data, message: data });
+      },
+      cancel: () => {
+        console.log("user cancel");
+        reject({ code: "-1", data: "", message: "user cancel" });
+      }
+    })
+  })
 }
 
-let useWxPay = (prepayid, extra) => {
-  return new Promise((resolve, reject) => {
-    console.log(prepayid);
+// app支付
+let useWxAppPay = (params) => {
+  return new Promise(async (resolve, reject) => {
+    let config = await getConfigOfWxAppPay(params);
+    let extra = {
+      app_id: config.appId,
+      partner_id: "",
+      package_value: "",
+      nonce_str: config.nonce_str,
+      time_stamp: "",
+      order_sign: config.sign
+    }
     console.log(extra);
     wxpay.pay({
-      prepayid: prepayid,
+      prepayid: config.prepay_id,
       extra: extra,
       success: (data) => {
         console.log("success", data);
         // app中返回prepayid web中返回final_url
-        resolve(data);
+        resolve({ code: "0", data: data, order: config.trade_no, message: "订单已经提交" });
       },
       fail: (data, code) => {
         console.log("error");
         console.log(data, code);
-        reject({ data, code });
+        reject({ code: code, data: data, message: data });
       },
       cancel: () => {
         console.log("user cancel");
-        reject({ message: "user cancel" });
+        reject({ code: "-1", data: "", message: "user cancel" });
       }
     })
   })
@@ -79,10 +115,10 @@ export const configAliPay = (params) => {
   return new Promise(async (resolve) => {
     let orderInfo = await getConfigOfAliPay(params);
     alipay.pay({
-      orderInfo: orderInfo,
+      orderInfo: orderInfo.order_info,
       callback: (ret) => {
         console.log("alipay cb", ret);
-        resolve({ code: ret.resultStatus, result: ret.result ? JSON.parse(ret.result) : "" })
+        resolve({ code: ret.resultStatus, order: orderInfo.trade_no, result: ret.result ? JSON.parse(ret.result) : "" })
       }
     })
   })

+ 3 - 6
src/manifest.json

@@ -1,6 +1,6 @@
 {
   "package": "com.beidao.kuaiying.zsy",
-  "name": "追书云小说",
+  "name": "追书云",
   "versionName": "1.0.0",
   "versionCode": "1",
   "minPlatformVersion": "1020",
@@ -40,14 +40,11 @@
       "name": "service.alipay"
     },
     {
-      "name": "system.webview"
-    },
-    {
       "name": "service.wxpay",
       "params": {
         "package": "com.beidao.kuaiying.zsy",
         "sign": "NEJEMkI2RjFFMzM2RDlEMTYyRjc4NTZCRTYwQjVEQjY=",
-        "url": ""
+        "url": "https://kyy.aizhuishu.com/pay/wxapp/wait"
       }
     }
   ],
@@ -60,7 +57,7 @@
     "logLevel": "debug"
   },
   "router": {
-    "entry": "views/Recharge",
+    "entry": "views/Pay",
     "pages": {
       "views/Index": {
         "component": "index"

+ 4 - 2
src/views/Category/index.ux

@@ -39,7 +39,7 @@
         </div>
       </list-item>
       <list-item type="loading" if="!list.length">
-        <x-loading text="{{loadingText}}"></x-loading>
+        <x-loading text="{{loadingText}}" empty="{{empty}}"></x-loading>
       </list-item>
       <block for="list">
         <list-item type="books-item" class="books-item__wrap {{$idx === 0 ? 'book-item__wrap--first' : ''}}">
@@ -95,6 +95,7 @@ export default {
         status: 1
       },
       meta: {},
+      empty: false,
       loadingText: "加载ing..."
     }
   },
@@ -138,6 +139,7 @@ export default {
     this.$element('search').focus({ focus: false });
   },
   getBooksArray(isLoad = true) {
+    this.empty = false;
     this.loadingText = "加载ing...";
     this.filter.page = (this.meta.current_page || 0) + 1;
     if (!isLoad) {
@@ -152,7 +154,7 @@ export default {
       newList.push(...dataList);
       this.meta = ret.meta;
       this.list = newList;
-      if (!this.list.length) this.loadingText = "没有更多数据";
+      if (!this.list.length) this.loadingText = "没有更多数据", this.empty = true;
     }).catch(e => {
       console.log("e", e);
     })

+ 49 - 6
src/views/Pay/index.ux

@@ -6,12 +6,12 @@
           <div class="top-user__wrap">
             <div class="user-balance">
               <text>您的余额:</text>
-              <text class="balance">10</text>
+              <text class="balance">{{balance}}</text>
               <text>书币</text>
             </div>
-            <div class="chapter-cost">
+            <div class="chapter-cost" if="fee">
               <text>当前章节需要消耗</text>
-              <text class="cost">20</text>
+              <text class="cost">{{fee}}</text>
               <text>书币</text>
             </div>
           </div>
@@ -67,14 +67,22 @@
 
 <script>
 import prompt from '@system.prompt';
-import { getChargeList } from "../../api";
+import { getChargeList, getUserInfo, checkWxOrder } from "../../api";
 import { configWxPay, configAliPay } from "../../helper";
 
 export default {
+  protected: {
+    bid: "",
+    code: "",
+    fee: ""
+  },
   private: {
     curPayType: 1,
     curSelect: 0,
+    balance: 0,
+    send_order_id: 0,
     total: "50元",
+    isInPay: false,
     payType: [
       {
         name: "支付宝",
@@ -96,6 +104,11 @@ export default {
     this.curSelect = key;
     this.total = this.rechargeList[key].price;
   },
+  async getUserInfo() {
+    let userinfo = await getUserInfo();
+    this.balance = userinfo.balance;
+    this.send_order_id = userinfo.send_order_id;
+  },
   async initChargeList() {
     this.rechargeList = await getChargeList();
     this.rechargeList.forEach((p, k) => {
@@ -108,11 +121,40 @@ export default {
     let cur_pay_type = this.curPayType;
     let product_id = this.rechargeList[this.curSelect].product_id;
     console.log(cur_pay_type);
+    this.isInPay = true;
     if (cur_pay_type === 1) {
-      let ret = await configAliPay({ product_id: product_id });
+      let ret = await configAliPay({ product_id: product_id, bid: this.bid, send_order_id: this.send_order_id });
       this.showToastByCode(ret.code);
     }
-    else configWxPay({ product_id: product_id });
+    else {
+      let wx_ret = await configWxPay({ product_id: product_id, bid: this.bid, send_order_id: this.send_order_id });
+      console.log("isInPay", this.isInPay);
+      this.isInPay = false;
+      console.log("wx_ret", wx_ret);
+      console.log("isInPay", this.isInPay);
+      // 查询订单
+      this.checkOrderIfNotApp(wx_ret);
+    }
+  },
+  checkOrderIfNotApp(order_info) {
+    console.log(order_info);
+    let { data, order } = order_info;
+    // if (data.final_url) {
+    //   // h5支付回调
+    //   console.log("check h5 order");
+    //   let times = 0;
+    //   this.timer = setInterval(async () => {
+    //     if (times === 10) clearInterval(this.timer), this.showToastByCode("6004");
+    //     else {
+    //       times++;
+    //       let fb = await checkWxOrder(order);
+    //       if (fb) clearInterval(this.timer), this.showToastByCode("9000");
+    //     }
+    //   }, 1000)
+    // } else if (data.prepayid) {
+    //   // app支付回调
+    //   this.showToastByCode("9000");
+    // }
   },
   showToastByCode(code) {
     let msg = "支付成功!";
@@ -130,6 +172,7 @@ export default {
   },
   onInit() {
     this.initChargeList();
+    this.getUserInfo();
   },
   onHide() {
     this.$app.$def.createShortcut(true);