import React, { Component } from "react" import "./index.scss" import { getParam, http, browser } from "src/utils" import { Toast } from "antd-mobile" import { withRouter } from "react-router-dom" import { compose } from "redux" import { connect } from "react-redux" import { differenceInHours, differenceInMinutes, differenceInSeconds, } from "date-fns" class Single extends Component { constructor(props) { super(props) this.state = { // status: 1, orderId: "", nowPrice: "", laterPrice: "", hour: "", min: "", sec: "", endTime: "", groupOrderId: "", payType: "0", // 1支付宝 0微信 // singleBox: false, showSingleBox: false, } } componentDidMount() { // if (getParam('is_class') === 1 || getParam('weixinpay')) { // console.log(0); // this.payCallback() // } // if (browser.isWeixin) { // this.isweixinPay() // } } componentWillReceiveProps(nextProps, nextContext) { // console.log(nextProps); // this.setState({ // singleBox: nextProps.singleBox // }) } // 选择支付方式 check = (type) => { this.setState({ payType: type, }) } // 确定购买 toBuy = () => { const { courseId } = this.props const videoID = this.props.data.video_id || this.props.data.id http.get(`${API.home}/sys/createClassOrder/${videoID}`).then((res) => { if (res.data.code === 200) { this.setState({ orderId: res.data.data.order_id, }) this.state.payType === "1" ? this.alipayPay(res.data.data.order_id, courseId) : this.weixinPay(res.data.data.order_id) } else { Toast.info(res.data.msg, 2) } }) } // 微信支付 weixinPay = (orderId) => { // 微信内部-支付 if (browser.isWeixin) { window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx23dac6775ac82877&redirect_uri=" + encodeURIComponent( window.location.href + "&aa=bb&oid=" + orderId ).toLowerCase() + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect" } else { // 微信外部-支付 http .get(`${API["base-api"]}/pay/wxpay/wap_charge/oid/${orderId}`) .then((res) => { if (res.data.errno === 0) { window.location.href = res.data.data.url + "&redirect_url=" + encodeURIComponent( window.location.href + "&weixinpay=1&oid=" + orderId ).toLowerCase() } else { Toast.info(res.data.msg, 2) } }) } } // 支付宝支付 alipayPay = (orderId, courseId) => { http .get(`${API["base-api"]}/pay/alipay/wap_charge_new/oid/${orderId}`) .then((res) => { if (res.data.errno === 0) { window.location = res.data.data.url courseId && window.localStorage.setItem("payCourse", courseId) } else { Toast.info(res.data.msg, 2) } }) } // 微信内部支付 isweixinPay = () => { let _this = this let weixin_code = getParam("code") if (weixin_code) { if (!getParam("oid")) { return } else { http .get( `${API["base-api"]}/pay/wxpay/pub_charge/oid/${getParam( "oid" )}/code/${weixin_code}` ) .then((res) => { if (res.data.errno === 0) { const data = res.data.data function onBridgeReady() { WeixinJSBridge.invoke( "getBrandWCPayRequest", { appId: data.appId, //公众号名称,由商户传入 timeStamp: data.timeStamp, //时间戳,自1970年以来的秒数 nonceStr: data.nonceStr, //随机串 package: data.package, signType: data.signType, //微信签名方式: paySign: data.paySign, //微信签名 }, function (res) { if (res.err_msg === "get_brand_wcpay_request:ok") { Toast.info("支付成功", 2) _this.intervalPayStatus = setInterval(function () { http .get( `${API["base-api"]}/m/orderState/oid/${getParam( "oid" )}` ) .then((res) => { if (res.data.errno === 401) { clearInterval(_this.intervalPayStatus) _this.intervalPayStatus = null // 获取课程类型 http .get( `${ API["base-api"] }/class_order_status/${getParam("oid")}` ) .then((res) => { if (Number(res.data.data.errno) === 200) { // 正常购买单集成功 this.setState({ status: 6, showSingleBox: true, }) } else if ( Number(res.data.data.errno) === 201 ) { // 0元参团 this.setState({ status: 4, showSingleBox: true, }) } else if ( Number(res.data.data.errno) === 202 ) { // 0元购 this.setState({ status: 3, showSingleBox: true, }) } else if ( Number(res.data.data.errno) === 203 ) { // 三天内特价 this.setState({ nowPrice: res.data.data.data.now_price, laterPrice: res.data.data.data .three_day_later_price, status: 2, showSingleBox: true, }) } else { Toast.info(res.data.data.msg, 2) } }) } }) }, 1000) } else { alert("支付失败") } } ) } if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener( "WeixinJSBridgeReady", onBridgeReady, false ) } else if (document.attachEvent) { document.attachEvent("WeixinJSBridgeReady", onBridgeReady) document.attachEvent("onWeixinJSBridgeReady", onBridgeReady) } } else { onBridgeReady() } } else { Toast.info(res.data.msg, 2) } }) } } } // 支付完成之后获取状态 payCallback = () => { const _this = this if (!getParam("oid")) { return } else { _this.intervalPayStatus = setInterval(function () { http .get(`${API["base-api"]}/m/orderState/oid/${getParam("oid")}`) .then((res) => { if (res.data.errno === 401) { clearInterval(_this.intervalPayStatus) _this.intervalPayStatus = null // 获取课程类型 http .get(`${API["base-api"]}/class_order_status/${getParam("oid")}`) .then((res) => { if (Number(res.data.data.errno) === 200) { // 正常购买单集成功 this.setState({ status: 6, showSingleBox: true, }) } else if (Number(res.data.data.errno) === 201) { // 0元参团 this.setState({ status: 4, showSingleBox: true, }) } else if (Number(res.data.data.errno) === 202) { // 0元购 this.setState({ status: 3, showSingleBox: true, }) } else if (Number(res.data.data.errno) === 203) { // 三天内特价 this.setState({ nowPrice: res.data.data.data.now_price, laterPrice: res.data.data.data.three_day_later_price, status: 2, showSingleBox: true, }) } else { Toast.info(res.data.data.msg, 2) } }) } }) }, 1000) } } // 特价购买全集 toBuyAll = () => {} // 0元购买全集 zerobuyReceive = () => { Toast.success("购买全集成功", 3) this.colse() } // 0元参团 zerogroupBuy = () => { this.getOrderId() } // 获取订单号-0元参团 getOrderId = () => { let data = { course_id: getParam("id"), } http.post(`${API["base-api"]}/pdd/sys`, data).then((res) => { if (res.data.errno === 0) { this.setState({ groupOrderId: res.data.data.order_id, }) this.getOrderStatus(res.data.data.order_id) } else { Toast.info(res.data.msg, 2) } }) } // 获取订单状态-0元参团 getOrderStatus = (id) => { http.get(`${API.home}/m/pdd/order_status/${id}`).then((res) => { if (res.data.code === 200) { this.getTime(res.data.data.pdd_order_id) } else { Toast.info(res.data.msg, 2) } }) } // 获取倒计时-0元参团 getTime = (id) => { http.get(`${API.home}/m/pdd_order_end_time/${id}`).then((res) => { if (res.data.code === 200) { this.setState({ endTime: res.data.data.end_time, status: 7, }) } else { Toast.info(res.data.msg, 2) } }) } // 邀请好友参团 toGroup = () => { this.props.history.push(`/togroup?id=${this.state.groupOrderId}`) } // 关闭弹窗 colse = () => { this.props.boxHide(false) this.setState({ status: 1, }) } render() { if (this.state.endTime) { let date = this.state.endTime * 1000 let now = Date.now() setInterval(() => { date -= 1000 let s = differenceInSeconds(new Date(date), now) % 60, m = differenceInMinutes(new Date(date), now) % 60, h = differenceInHours(new Date(date), now) % 24 this.setState({ hour: h, min: m, sec: s, }) }, 1000) } const { singleType } = this.props return ( singleType === 1 && ( <div> <div className="popup-box"> <div className="content singleset-payment"> <div className="price-box"> <span>实付款:</span> <p>{this.props.data.class_price}元</p> </div> <div className="course-info"> <p className="text-overflow-1"> <span>课程:</span> {this.props.title} </p> <p className="text-overflow-1"> <span>课时:</span> {this.props.data.name} </p> </div> <div className="payment-type"> <label>支付方式:</label> <p onClick={this.check.bind(this, "0")}> <i className="iconfont iconweixinzhifu buy"></i> <span>微信支付</span> <i className={`iconfont icondanseshixintubiao-5 redio ${ this.state.payType === "0" ? "redioed" : "" }`} ></i> </p> {!browser.isWeixin && ( <p onClick={this.check.bind(this, "1")}> <i className="iconfont iconalipay"></i> <span>支付宝</span> <i className={`iconfont icondanseshixintubiao-5 redio ${ this.state.payType === "1" ? "redioed" : "" }`} ></i> </p> )} </div> <div className="btn btn-18B4ED" onClick={this.toBuy}> 确认购买 </div> </div> <i onClick={this.colse} className={"iconfont iconiconfront-2 close"} ></i> </div> </div> ) ) } } export default compose( connect((state) => ({ user: state.user }), null), withRouter )(Single)