| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 | // 必须传入price,show tradeNo // bind:payResult 返回支付状态const CONFIG = require("../../config.js");const Parse = getApp().Parse;const company = getApp().globalData.company;Component({  behaviors: [],  properties: {    show: {      type: Boolean,      value: false,    },    //支付价格 *必填    price: {      type: Number,      value: 0,    },    //订单id Order表创建后id     orderId: {      type: String,    },    //支付类型     orderType: {      type: String,      value: 'shopgoods'    },    //订单编号 *必填    tradeNo: {      type: String,    },    //显示公益金支付 Profile — bonus字段    showBonus: {      type: Boolean,      value: false    },    //显示支付类型    showType: {      type: String,      value: 'all'    },    profileId: {      type: String    }  },  data: {    radio: "wxpay",    isPay: false,    balanceTitle:CONFIG.default.payBalanceTitle || '余额'  },  lifetimes: {    created() {    },    attached() {},    moved() {},    detached() {},  },  pageLifetimes: {    show: async function () {      // 页面显示    },    hide: function () {      // 页面被隐藏      this.setData({        show: false,      });    },    resize: function (size) {      // 页面尺寸变化    },  },  methods: {    onChange(event) {      console.log(event)      this.setData({        radio: event.detail,      });      console.log(this.data.radio);    },    onClickHide() {      this.setData({        show: false      });      this.payResult("Cancel the payment", undefined);    },    /* 支付结果返回父组件 */    payResult(state, no) {      let {        radio      } = this.data      this.triggerEvent("payResult", {        params: state,        no: no,        type: radio      });    },    pay() {      if (this.data.isPay) {        wx.showToast({          title: '你已支付,请勿重复提交',          icon: "none"        })        return      }      let payType = this.data.radio;      switch (payType) {        case "wxpay":          console.log(this.properties.tradeNo)          this.wxPay();          break;        case "balance":          this.balance();          break;        case "bonus":          this.bonusPay();          break;        case "offline":          break;      }    },    async wxPay() {      let that = this;      let Account = new Parse.Query("Account");      Account.equalTo("user", Parse.User.current().id);      Account.equalTo("company", company);      let account = await Account.first();      let AccountLog = Parse.Object.extend("AccountLog");      let accountLog = new AccountLog();      accountLog.set("assetType", "wxPay");      accountLog.set("payType", "wxpay-wxapp");      accountLog.set("assetCount", this.data.price);      accountLog.set("desc", "微信支付");      accountLog.set("orderType", this.data.orderType + "-wxpay");      accountLog.set("orderNumber", this.properties.tradeNo);      if (this.properties.orderId) accountLog.set("orderId", this.properties.orderId)      accountLog.set("isVerified", false);      accountLog.set("targetName", "system");      if (account) {        accountLog.set("fromAccount", account.toPointer());      }      accountLog.set("fromName", Parse.User.current().get("nickname"));      accountLog.set("company", {        __type: "Pointer",        className: "Company",        objectId: company,      });      let appId = getApp().globalData.appid;      let openId = wx.getStorageSync("userInfo").openid;      if(!openId && Parse.User.current().get("wxapp")){        openId = Parse.User.current().get("wxapp")?.[appId]?.openid      }      let goodsTotalPrice = this.data.price;      console.log(goodsTotalPrice)      if(goodsTotalPrice == 0){        this.updateLog(accountLog)        return      }      wx.request({        method: "POST",        url: "https://server.fmode.cn/api/wxpay/neworder",        data: {          appid: appId,          openid: openId,          out_trade_no: that.properties.tradeNo,          total_fee: goodsTotalPrice,          company: company        },        success: (payres) => {          console.log("Pay Params");          console.log(payres);          let payinfo = payres.data;          wx.requestPayment({            appId: appId,            timeStamp: payinfo.timeStamp,            nonceStr: payinfo.nonceStr,            package: payinfo.package,            signType: "MD5",            paySign: payinfo.paySign,            async success(data) {              that.updateLog(accountLog)              wx.showToast({                title: "支付成功",                icon: "success",                duration: 1500,              });              that.setData({                show: false              })            },            fail(err) {              that.payResult(err, that.properties.tradeNo);              wx.showToast({                title: "支付失败",                icon: "error",                duration: 1500,              });            },            complete:(data) => {              console.log(111,data)            }          });        },        fail: (err) => {          wx.showToast({            title: "支付失败",            icon: "error",            duration: 1500,          });          return false;        },              });    },    //支付成功更新log    async updateLog(accountLog){      this.payResult("ok", this.properties.tradeNo);      accountLog.set("isVerified", true);      await accountLog.save()    },    async sendOrder(tradeNo) {      let that = this;      let DramaOrderLog = Parse.Object.extend("UserAgentOrder");      let current = Parse.User.current();      let dramaOrderLog = new DramaOrderLog();      dramaOrderLog.set("user", {        __type: "Pointer",        className: "_User",        objectId: current.id,      });      dramaOrderLog.set("orderId", tradeNo);      dramaOrderLog.set("company", {        __type: "Pointer",        className: "Company",        objectId: getApp().globalData.company,      });      await dramaOrderLog.save();    },    async balance() {      let { balanceTitle } = this.data      let _this = this;      try {        let price = this.data.price        let Account = new Parse.Query("Account");        Account.equalTo("user", Parse.User.current().id);        Account.equalTo("company", company);        let account = await Account.first();        console.log(account);        if (!account.get("balance") || price > account.get("balance")) {          wx.showToast({            title: `${balanceTitle == '积分' ? '积分不足' : '余额不足,请充值'}`,            icon: "none"          })          return        }        let AccountLog = Parse.Object.extend("AccountLog");        let accountLog = new AccountLog();        accountLog.set("assetType", "balance");        accountLog.set("payType", "balance");        accountLog.set("assetCount", this.data.price);        accountLog.set("desc", `${balanceTitle}支付`);        accountLog.set("orderType", this.data.orderType + "-balance");        accountLog.set("orderNumber", this.properties.tradeNo);        if (this.properties.orderId) accountLog.set("orderId", this.properties.orderId)        accountLog.set("isVerified", false);        accountLog.set("targetName", "system");        if (account) {          accountLog.set("fromAccount", account.toPointer());        }        accountLog.set("fromName", Parse.User.current().get("nickname"));        accountLog.set("company", {          __type: "Pointer",          className: "Company",          objectId: company,        });        accountLog.save()          .then((res) => {            res.set("isVerified", true);            res.save().then((result) => {              console.log(result)              wx.showToast({                title: "支付成功",                icon: "success",                duration: 1500,              });              _this.payResult("ok", this.properties.tradeNo);            })          })      } catch (error) {        console.log(error)        wx.showToast({          title: "支付失败",          icon: "error",          duration: 1500,        });        _this.payResult(error);      }      this.setData({        isPay: true      })    },    //公益金支付    async bonusPay() {      let _this = this;      let {        profileId      } = this.data      try {        let data = await this.customSQL()        console.log(data);        if (data.code == 200) {          let Account = new Parse.Query("Account");          Account.equalTo("user", Parse.User.current().id);          Account.equalTo("company", company);          let account = await Account.first();          let AccountLog = Parse.Object.extend("AccountLog");          let accountLog = new AccountLog();          accountLog.set("assetType", "bonus");          accountLog.set("payType", "bonus");          accountLog.set("assetCount", this.data.price);          accountLog.set("desc", "公益金支付");          accountLog.set("orderType", this.data.orderType + "-bonus");          accountLog.set("orderNumber", this.properties.tradeNo);          if (this.properties.orderId) accountLog.set("orderId", this.properties.orderId)          accountLog.set("isVerified", true);          accountLog.set("targetName", "system");          if (!profileId && account) {            accountLog.set("fromAccount", account.toPointer());          }          accountLog.set("fromName", Parse.User.current().get("nickname"));          accountLog.set("company", {            __type: "Pointer",            className: "Company",            objectId: company,          });          await accountLog.save()          wx.showToast({            title: data.msg,            icon: 'none',            image: '',            duration: 1500,            mask: false,          });          _this.payResult("ok", this.properties.tradeNo);        }else{          wx.showToast({            title: data.msg,            icon: 'none',            image: '',            duration: 1500,            mask: false,          });        }      } catch (err) {        console.log(err)        wx.showToast({          title: "支付失败",          icon: "error",          duration: 1500,        });        _this.payResult(error);      }    },    async customSQL() {      let price = this.data.price      let {        profileId      } = this.data      let promise = await new Promise((resolve, rej) => {        wx.request({          url: "https://server.fmode.cn/api/food/bonus",          data: {            pid: profileId,            price: price,            company: company          },          method: "POST",          success(data) {            console.log(data);            resolve(data.data)          },          fail(err) {            rej(err);          },        });      });      return promise;    },  },  observers: {    show: function (show) {      console.log(show)    }  }});
 |