<template>
  <div class="domain">{{ message }}</div>
</template>

<script>
import { formatTime, serialize } from "@/utils/index";
import wxPay from "@/api/wxPay";
const app = getApp();
const { log } = app;

function fn(_this) {
  // _this.message = "支付成功";
  if (!_this.options_isCard) {
    let query;
    if (_this.batchNumber) {
      query = {
        orderSn: _this.options.orderSn,
        batchNumber: _this.batchNumber,
        multiMerchantsFlag: 1,
        totalMoney: _this.totalMoney,
      };
    } else {
      query = {
        orderSn: _this.options.orderSn,
      };
    }
    // sso场景(跳转第三方url)
    if (_this.scene == "sso") {
      console.log(_this.backUrl,'----------pay--_this.backUrl')
      setTimeout(() => {
        wx.redirectTo({
          url: `../wxArticle/main?from=sso&link=${_this.backUrl}`,
        });
      }, 500);
      return;
    }
    let params = `?${serialize(query)}`;
    if (_this.options.accountBalanceFlag == 1) {
      // 余额充值
      params+= `&accountBalanceFlag=1&totalMoney=${_this.totalMoney}`
    }
    if (_this.options.isPayReplace == 1) {
      // 好友代付
      wx.redirectTo({
      url: `../index/main?from=wxPay&backpath=/order/payForOrderDetail&params=${JSON.stringify(
        query
      )}`,
    });
      return;
    }
    wx.redirectTo({
      url: `/pages/pages_subpack/paySuccess/main${params}`,
    });
  } else {
    let query = {
      cardTitle: _this.options_isCardTitle,
    };
    wx.redirectTo({
      url: `../index/main?from=wxPay&backpath=/pay/payCardSuccess&params=${JSON.stringify(
        query
      )}`,
    });
  }
}
export default {
  components: {
    // card
  },
  data() {
    return {
      message: "正在支付中",
      shopmixid: "",
      openId: "",
      options: {},
      options_orderType: "",
      // 购买会员卡新页面
      options_isCard: "",
      options_isCardTitle: "",
      batchNumber: "",
      totalMoney: "",
      scene: "", //sso
      backUrl: "",
    };
  },
  onLoad(options) {
    wx.showLoading({
      title: "加载中",
    });
    Object.assign(this.$data, this.$options.data()); //mpvue 的混合周期 使用小程序生命周期数据未初始化
    log.info("onload//", options);
    console.log(options,'--onLoad-options')
    if (options.batchNumber) {
      let ordercode = JSON.parse(options.ordercode);
      // 我要送礼
      if (ordercode.giveGiftsOrderSn) {
        ordercode.orderSn = ordercode.giveGiftsOrderSn;
      } else {
        ordercode.orderSn = "";
      }
      ordercode.batchNumber = options.batchNumber;
      this.options = ordercode;
      this.batchNumber = ordercode.batchNumber;
      log.info(JSON.parse(options.ordercode).orderSn);
      if (JSON.parse(options.ordercode).orderSn) {
        this.totalMoney = Number(
          JSON.parse(options.ordercode).totalAmount
        ).toFixed(2);
      } else {
        this.totalMoney = Number(
          JSON.parse(options.ordercode).totalAmount
        ).toFixed(2);
      }

      // }
      log.info(this.totalMoney, "totalMoney");
    } else {
      this.options = JSON.parse(options.ordercode);
      options.scene && (this.scene = options.scene);
      options.backUrl && (this.backUrl = options.backUrl);
      this.totalMoney = Number( JSON.parse(options.ordercode).totalAmount).toFixed(2);
    }

    this.options_orderType = options.orderType;
    this.options_isCard = options.isCard;
    this.options_isCardTitle = options.isCardTit;
    if (options.sessionid) {
      try {
        wx.setStorageSync("sessionid", options.sessionid);
      } catch (e) {}
    }
    let that = this;
    wx.getStorage({
      key: "openid",
      success(res) {
        log.info(that.options, "++++");
        log.info(res, "openid");
        that.options.openId = res.data;
        that.options.tradeType = "Mini";
        log.info("支付开始", that.options);
        that.toPay();
      },
      fail(err) {
        log.info("获取err", err);
      },
    });
  },
  methods: {
    testToPaySuccess() {
      let _this = this;
      let params = `?orderSn=${_this.options.orderSn}`;
      if (_this.options.accountBalanceFlag == 1) {
        // 余额充值
        params+= `&accountBalanceFlag=1&totalMoney=${_this.totalMoney}`
      }
      wx.redirectTo({
        url: `/pages/pages_subpack/paySuccess/main${params}`,
      });
    },
    toPay() {
      // this.testToPaySuccess();
      // return;
      wxPay
        .to_wx_pay(this.options)
        .then((res) => {
          wx.hideLoading();
          if (res.data.code == 200) {
            let payData = JSON.parse(res.data.data);
            log.info("wxPay", res.data);
            payData.success = (res) => {
              log.info("支付成功", res, this.options);
              this.message = "支付成功";
              const orderSn = this.options.orderSn;
              let vm = this;
              console.log(res,'---------------支付成功')

              try {
                const subscribeMessageObj = this.$store.state
                  .subscribeMessageObj;
                if (
                  subscribeMessageObj &&
                  Object.keys(subscribeMessageObj).length > 0
                ) {
                  // TODO 小程序订阅消息埋点
                  const tmplIds = [];
                  for (var key in subscribeMessageObj) {
                    // 送礼订单
                    if (
                      this.options_orderType == 5 &&
                      (key == "gift_be_expire" || key == "gift_draw")
                    ) {
                      tmplIds.push(subscribeMessageObj[key]);
                    }
                    // 订单发货
                    if (key == "order_shipment") {
                      tmplIds.push(subscribeMessageObj[key]);
                    }
                  }

                  if (tmplIds.length > 0) {
                    wx.requestSubscribeMessage({
                      tmplIds: tmplIds,
                      success(res) {
                        fn(vm);
                        log.info("message success response: ", res);
                      },
                      fail(res) {
                        fn(vm);
                        log.info("message fail response: ", res);
                      },
                    });
                  } else {
                    fn(vm);
                  }
                } else {
                  log.info("来这里了");
                  fn(this);
                }
              } catch (err) {
                console.error("subscribeMessage-err", err);
              }
            };
            payData.fail = (res) => {
              log.info("支付失败", res, this.options.orderSn);
              this.message = "支付失败";
              if ((res.errMsg = "requestPayment:fail cancel")) {
                wxPay.cancelPayment(this.options.orderSn).then(() => {
                  log.info("取消成功");
                });
              }
              // fn(this);
              this.toPage();

            };
            payData.complete = (res) => {
              log.info("支付completa", res, this.options.orderSn);
              // if (res.errMsg == "requestPayment:fail cancel") {
              //   log.info("支付取消", this.options);
              //   this.message = "支付取消";
              //   this.toPage();
              // }
            };
            wx.requestPayment(payData);
          } else {
            wx.showToast({ title: res.data.msg, icon: "none" });
          }
        })
        .catch((err) => {
          wx.showToast({ title: res.data.msg, icon: "none" });
        });
    },
    toPage() {
      log.info(
        "支付失败来这里了",
        this.backUrl,
        this.batchNumber,
        this.scene == "sso",
        this.scene
      );
      if (this.scene == "sso") {
        //sso模式(嵌入第三方)
        wx.navigateBack()
        return
      }
      if (this.batchNumber) {
        let query = {
          multiMerchantsFlag: 1,
        };
        wx.redirectTo({
          url: `../index/main?from=wxPay&backpath=/order/orderList&params=${JSON.stringify(
            query
          )}`,
        });
        return;
      }
      let query = {
        orderSn: this.options.orderSn,
        payList: true,
        orderListToorderDetail: true,
      };
      wx.redirectTo({
        url: `../index/main?from=wxPay&backpath=/order/orderDetail&params=${JSON.stringify(
          query
        )}`,
      });
    },
  },
};
</script>

<style>
.domain {
  text-align: center;
  padding-top: 50%;
}
</style>