Browse Source

订单详情 支付

wangkaiyue 5 years ago
parent
commit
acfc5c33c6

+ 5 - 1
src/jfw/front/vipsubscribe.go

@@ -1,6 +1,8 @@
 package front
 
 import (
+	"jfw/wx"
+
 	"github.com/go-xweb/xweb"
 )
 
@@ -35,7 +37,7 @@ func init() {
 	xweb.AddAction(&Subscribepay{})
 }
 
-//订阅收费介绍页
+//vip订阅介绍页
 func (s *Subscribepay) Introduce() {
 	s.Render("/weixin/vipsubscribe/vip_introduce.html")
 }
@@ -47,6 +49,7 @@ func (s *Subscribepay) TailInfo() {
 
 //订阅收费购买页面
 func (s *Subscribepay) ToPurchasePage() {
+	s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url()) //微信支付准备参数
 	s.Render("/weixin/vipsubscribe/vip_purchase.html")
 }
 
@@ -67,6 +70,7 @@ func (s *Subscribepay) ToPaySuccessPage() {
 
 //订阅收费支付订单详情页面
 func (s *Subscribepay) ToOrderDetailPage() {
+	s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url()) //微信支付准备参数
 	s.Render("/weixin/vipsubscribe/vip_order_detail.html")
 }
 

+ 1 - 0
src/jfw/modules/app/src/app/pay/dataexport_pay.go

@@ -29,6 +29,7 @@ func init() {
 		Sjdc_attachmsg:    util.ObjToString(payConfig["sjdc_attachmsg"]),
 		Sjdc_bodymsg:      util.ObjToString(payConfig["sjdc_bodymsg"]),
 		Sjdc_detailmsg:    util.ObjToString(payConfig["sjdc_detailmsg"]),
+		Subvip_msg:        util.ObjToString(payConfig["subvip_msg"]),
 	}
 }
 

+ 2 - 1
src/jfw/modules/app/src/app/pay/wxpay.go

@@ -3,6 +3,7 @@ package pay
 import (
 	"jfw/config"
 	"jfw/public"
+	"log"
 	"qfw/util"
 )
 
@@ -19,6 +20,6 @@ func init() {
 		Sjdc_bodymsg:      util.ObjToString(payConfig["sjdc_bodymsg"]),
 		Sjdc_detailmsg:    util.ObjToString(payConfig["sjdc_detailmsg"]),
 		Sjbg_msg:          util.ObjToString(payConfig["sjbd_msg"]),
-		Subvip_msg:        util.ObjToString(payConfig["subvip_msg"]),
+		//Subvip_msg:        util.ObjToString(payConfig["subvip_msg"]),
 	}
 }

+ 121 - 0
src/jfw/modules/subscribepay/src/service/order.go

@@ -0,0 +1,121 @@
+package service
+
+import (
+	"errors"
+	"log"
+	"strings"
+	"util"
+
+	qutil "qfw/util"
+
+	"github.com/go-xweb/xweb"
+)
+
+//订单结构
+type Order struct {
+	*xweb.Action
+	buyStatus         xweb.Mapper `xweb:"/order/buyStatus"`         //获取用户已购买
+	getOrderPayMsg    xweb.Mapper `xweb:"/order/getOrderPayMsg"`    //订单数据展示(支付成功页面)
+	getOrderPayAllMsg xweb.Mapper `xweb:"/order/getOrderPayAllMsg"` //订单数据展示(订单详情页面)
+}
+
+type orderResult struct {
+	Success bool  //是否成功
+	Err     error //错误
+	Data    map[string]interface{}
+}
+
+func (o *orderResult) Format() *map[string]interface{} {
+	errStr := ""
+	if o.Err != nil {
+		errStr = o.Err.Error()
+	}
+	return &map[string]interface{}{
+		"success": o.Success,
+		"errMsg":  errStr,
+		"data":    o.Data,
+	}
+}
+
+//订单数据展示(支付成功页面)
+func (this *Order) GetOrderPayMsg() {
+	orderCode := this.GetString("orderCode")
+	userId := this.GetSession("userId")
+	query := map[string]interface{}{
+		"user_id":      userId,
+		"order_code":   orderCode,
+		"order_status": 1,
+	}
+	m := util.Mysql.FindOne("dataexport_order", query, "pay_time,pay_way", "")
+	result := map[string]interface{}{}
+	if m == nil || len(*m) == 0 {
+		result["success"] = false
+		result["errMsg"] = "未找到订单"
+	} else {
+		result["success"] = true
+		result["pay_time"] = (*m)["pay_time"]
+		result["pay_way"] = (*m)["pay_way"]
+	}
+	this.ServeJson(result)
+
+}
+
+//订单数据展示(订单详情页面)
+func (this *Order) GetOrderPayAllMsg() {
+	orderCode := this.GetString("orderCode")
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	r := func() *orderResult {
+		if orderCode == "" {
+			return &orderResult{false, errors.New("订单号不能为空"), nil}
+		}
+		query := map[string]interface{}{
+			"user_id":    userId,
+			"order_code": orderCode,
+			//"order_status": 1,
+		}
+		oData := util.Mysql.FindOne("dataexport_order", query, "prepay_time,pay_time,pay_way,original_price,applybill_status,out_trade_no,filter,product_type,order_status", "")
+		//查询订单信息
+		if oData == nil || len(*oData) == 0 {
+			return &orderResult{false, errors.New("未找到此订单"), nil}
+		}
+		if qutil.IntAll((*oData)["order_status"]) != 1 {
+			return &orderResult{true, nil, map[string]interface{}{
+				"order": oData,
+			}}
+		}
+		//已支付订单查询有效时间
+		uData, ok := util.MQFW.FindById("user", userId, `{"l_vip_starttime":1,"l_vip_endtime":1}`)
+		if uData == nil || len(*uData) == 0 || !ok {
+			return &orderResult{false, errors.New("数据库查询异常"), nil}
+		}
+		delete(*uData, "_id")
+		return &orderResult{true, nil, map[string]interface{}{
+			"order":          oData,
+			"time":           uData,
+			"transaction_id": getPayTransactionId(qutil.ObjToString((*oData)["pay_way"]), qutil.ObjToString((*oData)["out_trade_no"])),
+		}}
+	}()
+	if r.Err != nil {
+		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
+	}
+	this.ServeJson(r.Format())
+}
+
+//获取支付单号
+func getPayTransactionId(payWay, tradeNo string) (transaction_id string) {
+	if payWay == "" || tradeNo == "" {
+		return
+	}
+	table := "ali_pay"
+	if strings.HasPrefix(payWay, "wx") {
+		table = "weixin_pay"
+	}
+	query := map[string]interface{}{
+		"out_trade_no": tradeNo,
+	}
+	r := util.Mysql.FindOne(table, query, "transaction_id", "")
+	if r != nil {
+		transaction_id = qutil.ObjToString((*r)["transaction_id"])
+	}
+	return
+}

+ 140 - 36
src/jfw/pay/vipSubscribePay.go

@@ -1,6 +1,7 @@
 package pay
 
 import (
+	"encoding/json"
 	"errors"
 	"fmt"
 	"jfw/config"
@@ -18,40 +19,49 @@ import (
 //订单结构
 type Order struct {
 	*xweb.Action
-	buyStatus   xweb.Mapper `xweb:"/front/vipsubscribe/buyStatus"`   //获取用户已购买
-	createOrder xweb.Mapper `xweb:"/front/vipsubscribe/createOrder"` //创建订单
+	createOrder xweb.Mapper `xweb:"/front/vipsubscribe/createOrder"` //创建订单并支付
+	orderToPay  xweb.Mapper `xweb:"/front/vipsubscribe/orderToPay"`  //支付已创建订单
 }
 
-//获取已购买选项
-func (this *Order) BuyStatus() {
-	userid := qutil.ObjToString(this.GetSession("userId"))
-	r := map[string]interface{}{"success": false}
-	if userid != "" {
-		m, ok := public.MQFW.FindById("user", userid, `{"i_vipstatus":1,"o_area":1,"a_buyerindustry":1}`)
-		if ok && len(*m) > 0 {
-			r["success"] = true
-			r["area"] = qutil.ObjToMap((*m)["o_area"])
-			r["industry"] = (*m)["a_buyerindustry"]
-			//r["industry"] = qutil.obj (*m)["a_buyerindustry"]
-			r["vipStatus"] = qutil.IntAll((*m)["i_vipstatus"])
-		}
+func init() {
+	xweb.AddAction(&Order{})
+}
+
+type orderResult struct {
+	Success bool  //是否成功
+	Err     error //错误
+	Data    map[string]interface{}
+}
+
+func (o *orderResult) Format() *map[string]interface{} {
+	errStr := ""
+	if o.Err != nil {
+		errStr = o.Err.Error()
+	}
+	return &map[string]interface{}{
+		"success": o.Success,
+		"errMsg":  errStr,
+		"data":    o.Data,
 	}
-	this.ServeJson(r)
 }
 
-//去支付
+//创建订单并支付
 func (this *Order) CreateOrder() {
 	area := qutil.ObjToMap(this.GetString("area"))
 	industry := strings.Split(this.GetString("industry"), ",")
-	date := this.GetString("date")
+	date := this.GetString("time")
 	payWay := this.GetString("payWay")
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
-	ok, str := func() (bool, string) {
+	r := func() *orderResult {
+		now := time.Now()
 		//数据校验
+		if len(industry) == 1 { //去掉[""]
+			industry = []string{}
+		}
 		date_count, date_unit, err := checkReqDate(date)
 		if err != nil {
-			return false, err.Error()
+			return &orderResult{false, err, nil}
 		}
 		log.Println(area, industry, date, payWay)
 		//插入订单表
@@ -62,34 +72,128 @@ func (this *Order) CreateOrder() {
 			"s_openid":     openId,
 			"i_cyclecount": date_count, //时长
 			"i_cycleunit":  date_unit,  //单位
-			"i_comeintime": time.Now().Unix(),
+			"i_comeintime": now.Unix(),
 		})
 		if mog_id == "" {
-			return false, "创建订单出错"
+			return &orderResult{false, errors.New("创建订单出错"), nil}
 		}
 		//计算价格
 		totalfee := 1
 		//创建订单
 		tradeno, ret := public.WxStruct.CreatePrepayOrder(config.Sysconfig["weixinrpc"].(string), "e", this.IP(), openId, "", totalfee)
-		if ret == nil {
-			return false, "创建微信订单出错"
+		if ret == nil || (*ret)["status"] != "1" {
+			errMsg := "创建微信订单出错"
+			if (*ret)["errcodedes"] != "" {
+				errMsg = (*ret)["errcodedes"]
+			} else if (*ret)["errcode"] != "" {
+				errMsg = (*ret)["errcode"]
+			}
+			return &orderResult{false, errors.New(errMsg), nil}
 		}
-		log.Println(tradeno, ret)
 		//存入订单表
+		ordercode := public.GetOrderCode(openId)
+		prepayid := qutil.ObjToString((*ret)["prepayid"])
+		jsPayParam := GetWxJsPayStr(prepayid)
 
-		//返回订单支付字符串
-		return true, ""
-	}()
+		filter := map[string]interface{}{
+			"_id":        mog_id,
+			"area":       area,
+			"industry":   industry,
+			"cyclecount": date_count, //时长
+			"cycleunit":  date_unit,  //单位
+		}
+		filterStr, _ := json.Marshal(filter)
 
-	this.ServeJson(map[string]interface{}{
-		"success": ok,
-		"Str":     str,
-	})
+		orderid := public.Mysql.Insert("dataexport_order", map[string]interface{}{
+			"order_money":    totalfee,
+			"order_status":   0,
+			"user_nickname":  qutil.ObjToString(this.GetSession("s_nickname")),
+			"user_openid":    openId,
+			"prepay_id":      prepayid,
+			"code_url":       jsPayParam,
+			"out_trade_no":   tradeno,
+			"order_code":     ordercode,
+			"product_type":   "vip订阅",
+			"create_time":    qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"prepay_time":    qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"original_price": totalfee,
+			"filter_id":      mog_id,
+			"pay_way":        payWay,
+			"user_id":        userId,
+			"filter":         string(filterStr), //筛选
+		})
+		if orderid == -1 {
+			return &orderResult{false, errors.New("数据库操作异常"), nil}
+		}
+		return &orderResult{true, nil, map[string]interface{}{
+			"code": ordercode,
+			"res":  jsPayParam,
+		}}
+	}()
+	if r.Err != nil {
+		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
+	}
+	this.ServeJson(r.Format())
 }
 
-//查询订单是否支付
-func (this *Order) IsPaySuccess() {
-
+//支付已创建订单
+func (this *Order) OrderToPay() {
+	orderCode := qutil.ObjToString(this.GetString("orderCode"))
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	r := func() *orderResult {
+		//根据订单号获取订单数据
+		query := map[string]interface{}{
+			"user_id":      userId,
+			"order_code":   orderCode,
+			"order_status": 0,
+		}
+		oData := public.Mysql.FindOne("dataexport_order", query, "", "")
+		if oData == nil || len(*oData) == 0 {
+			return &orderResult{false, errors.New("未知订单"), nil}
+		}
+		//判断订单是否超过两小时
+		prepayTime, _ := time.ParseInLocation(qutil.Date_Full_Layout, qutil.ObjToString((*oData)["prepay_time"]), time.Local)
+		jsPayParam := qutil.ObjToString((*oData)["code_url"])
+		if time.Now().Before(prepayTime.Add(time.Hour*2)) && jsPayParam != "" {
+			//未过期
+			return &orderResult{true, nil, map[string]interface{}{
+				"res": jsPayParam,
+			}}
+		}
+		//重新生成订单
+		openId := qutil.ObjToString((*oData)["user_openid"])
+		totalfee := qutil.IntAll((*oData)["order_money"])
+		tradeno, ret := public.WxStruct.CreatePrepayOrder(config.Sysconfig["weixinrpc"].(string), "e", this.IP(), openId, "", totalfee)
+		if ret == nil || (*ret)["status"] != "1" {
+			errMsg := "创建微信订单出错"
+			if (*ret)["errcodedes"] != "" {
+				errMsg = (*ret)["errcodedes"]
+			} else if (*ret)["errcode"] != "" {
+				errMsg = (*ret)["errcode"]
+			}
+			return &orderResult{false, errors.New(errMsg), nil}
+		}
+		prepayid := qutil.ObjToString((*ret)["prepayid"])
+		jsPayParam = GetWxJsPayStr(prepayid)
+		//更新订单表
+		now := time.Now()
+		ok := public.Mysql.Update("dataexport_order", query, map[string]interface{}{
+			"code_url":     jsPayParam,
+			"prepay_time":  qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"out_trade_no": tradeno,
+			"prepay_id":    prepayid,
+		})
+		if !ok {
+			return &orderResult{false, errors.New("数据库操作异常"), nil}
+		}
+		return &orderResult{true, nil, map[string]interface{}{
+			"res": jsPayParam,
+		}}
+	}()
+	if r.Err != nil {
+		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
+	}
+	this.ServeJson(r.Format())
 }
 
 //cycleunit(1:年 2:月)
@@ -104,7 +208,7 @@ func checkReqDate(dateStr string) (cyclecount, cycleunit int, err error) {
 		}
 		return
 	} else if strings.HasSuffix(dateStr, "月") {
-		cycleunit = 1
+		cycleunit = 2
 		dateStr = strings.Replace(dateStr, "个月", "", -1)
 		cyclecount, err = strconv.Atoi(dateStr)
 		if cyclecount > 12 && err == nil {

+ 24 - 0
src/jfw/pay/weixin.go

@@ -1,6 +1,7 @@
 package pay
 
 import (
+	"encoding/json"
 	"fmt"
 	"jfw/config"
 	"jfw/jyutil"
@@ -46,6 +47,7 @@ func init() {
 		Sjdc_bodymsg:      util.ObjToString(payConfig["sjdc_bodymsg"]),
 		Sjdc_detailmsg:    util.ObjToString(payConfig["sjdc_detailmsg"]),
 		Sjbg_msg:          util.ObjToString(payConfig["sjbd_msg"]),
+		Subvip_msg:        util.ObjToString(payConfig["subvip_msg"]),
 		OpenidSwitch:      util.ObjToMap(config.WeixinConfig["openidSwitch"]),
 	}
 }
@@ -299,3 +301,25 @@ func (c *WxPayAction) Qr(code string) error {
 	_, err := w.Write(pngdat)
 	return err
 }
+
+//获取js支付参数(未方便存库返回string,前端需要转成json)
+func GetWxJsPayStr(prepayid string) string {
+	//获取订单支付字符串
+	nonceStr := util.GetRandom(16) + util.GetLetterRandom(16)
+	timestamp := time.Now().Unix()
+	sign := util.WxSign(fmt.Sprintf("appId=%s&nonceStr=%s&package=%s&signType=%s&timeStamp=%d&key=%s", public.WxStruct.Appid, nonceStr, "prepay_id="+prepayid, "MD5", timestamp, public.WxStruct.Key))
+	m := map[string]interface{}{
+		"appId":     public.WxStruct.Appid,
+		"timestamp": fmt.Sprint(timestamp),
+		"signType":  "MD5",
+		"sign":      sign,
+		"nonceStr":  nonceStr,
+		"prepayId":  "prepay_id=" + prepayid,
+	}
+	byteArr, err := json.Marshal(m)
+	if err != nil {
+		log.Println("GetWxJsPayStr ", err)
+		return ""
+	}
+	return string(byteArr)
+}

+ 19 - 2
src/web/staticres/vipsubscribe/js/common.js

@@ -3,12 +3,29 @@ $(function() {
     FastClick.attach(document.body); 
 });
 
+//请求同意调用
 function $DoPost(url,param,callback){
 	$.post(url+"?t="+new Date().getTime(),param,function(r){
-		if(r.error=="需要登录!"){
-			alert(r.error)
+		if(r.error||r.errMsg){
+			var errTip = r.error||r.errMsg;
+			weui.toast(errTip,{
+	          duration: 2000,
+	          className: 'custom-toast',
+	        });
 		}else{
 			callback(r)
 		}
     })
 }
+
+//获取url参数
+function getParam(name) {
+  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
+  var r = window.location.search.substr(1).match(reg); //获取url中"?"符后的字符串并正则匹配
+  var context = "";
+  if (r != null)
+      context = r[2];
+  reg = null;
+  r = null;
+  return context == null || context == "" || context == "undefined" ? "" : context;
+}

+ 211 - 17
src/web/templates/weixin/vipsubscribe/vip_order_detail.html

@@ -13,6 +13,7 @@
     <link rel="stylesheet" type="text/css" href="/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" type="text/css" href="/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" href="/vipsubscribe/css/public.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="/vipsubscribe/css/weui.min.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="/vipsubscribe/css/vip_order_detail.css?v={{Msg "seo" "version"}}">
 </head>
 
@@ -23,22 +24,22 @@
                 <div class="card">
                     <div class="card-header">
                         <img src="/vipsubscribe/image/line.png?v={{Msg "seo" "version"}}">
-                        <h3>已完成</h3>
+                        <h3 id="pageTitle"></h3>
                         <!-- <h3>待付款</h3> -->
                         <img src="/vipsubscribe/image/line.png?v={{Msg "seo" "version"}}">
                     </div>
                     <div class="card-content">
-                        <p class="text ellipsis">订单编号:000000001</p>
-                        <p class="text ellipsis">下单时间:2018.11.04 11:42:57</p>
+                        <p class="text ellipsis">订单编号:<span class="orderCode"></span></p>
+                        <p class="text ellipsis">下单时间:<span class="prepayTime"></span></p>
                         <!-- 订单状态为已完成时显示支付时间、自动续费、支付方式和订单号,状态为待付款时不显示 -->
-                        <p class="text ellipsis">支付时间:2018.11.04 11:50:34</p>
-                        <p class="text ellipsis">自动续费:未开通</p>
-                        <p class="text ellipsis">支付方式:支付宝</p>
-                        <p class="text ellipsis">支付单号:20190807200040011100700017263554</p>
-                        <p class="text ellipsis">产品类型:VIP订阅</p>
-                        <p class="text ellipsis">价格:105.10元</p>
+                        <p class="text ellipsis line_paytime" style="display:none">支付时间:<span class="payTime"></span></p>
+                        <p class="text ellipsis line_autoPay"  style="display:none">自动续费:<span>未开通</span></p>
+                        <p class="text ellipsis line_payway"  style="display:none">支付方式:<span class="payWay"></span></p>
+                        <p class="text ellipsis line_transaction"  style="display:none">支付单号:<span class="transaction_id"></span></p>
+                        <p class="text ellipsis">产品类型:<span class="productType"></span></p>
+                        <p class="text ellipsis">价格:¥<span class="price"></span></p>
                         <!----- 未开发票状态 ----->
-                        <p class="text ellipsis">发票:<a href="invoice.html" class="invoicing">开发票</a></p>
+                        <p class="text ellipsis invoice">发票:<a href="invoice.html" class="invoicing" style="display:none">开发票</a></p>
                         <!----- 已开发飘状态 ----->
                         <!--  单位发票-->
                         <div class="unit" style="display: none;">
@@ -66,25 +67,25 @@
                         <div class="item-list">
                             <label>订阅区域:</label>
                             <ul class="item-list-parents">
-                                <li>1个省级区域、4个地市</li>
+                                <li class="areaNum"></li>
                             </ul>
                         </div>
                         <div class="item-list">
                             <label>订阅行业:</label>
                             <ul class="item-list-parents">
-                                <li>3个行业</li>
+                                <li><span class="industryNum"></span></li>
                             </ul>
                         </div>
                         <div class="item-list">
                             <label>订阅周期:</label>
                             <ul class="item-list-parents">
-                                <li>3个月</li>
+                                <li><span class="cyclecount"></span><span class="cycleunit">个月</span></li>
                             </ul>
                         </div>
-                        <div class="item-list">
+                        <div class="item-list line_cycle" style="display:none">
                             <label>有效日期:</label>
                             <ul class="item-list-parents">
-                                <li>2019.07.30 - 2019.10.31</li>
+                                <li><span class="serviceTime"></span></li>
                             </ul>
                         </div>
                     </div>
@@ -92,8 +93,201 @@
             </div>
         </main>
         <!-- 当状态为待付款时显示去支付按钮 -->
-        <a href="#" class="button align">去支付</a>
+        <a href="#" class="button align" style="display:none">去支付</a>
     </div>
 </body>
-
+<script src="/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
+<script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
+<script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
+<script src="/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+<script>
+var signature = {{.T.signature}};
+var isConfigSuccess = true;
+var id = {{.T._id}}
+if(signature && signature.length == 4){
+	wx.config({
+	    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+	    appId: signature[0], // 必填,公众号的唯一标识
+	    timestamp:signature[1], // 必填,生成签名的时间戳
+	    nonceStr: signature[2], // 必填,生成签名的随机串
+	    signature: signature[3],// 必填,签名,见附录1
+	    jsApiList: ['chooseWXPay','hideAllNonBaseMenuItem'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+	});
+	wx.ready(function () {
+		if(!isConfigSuccess){
+			return;
+		}
+		wx.hideAllNonBaseMenuItem();
+    });
+	wx.error(function(res){
+	    //config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
+		//alert(res);
+		isConfigSuccess = false;
+	});
+}
+</script>
+<script>
+  $(function(){
+    var canpay=true;
+    var orderCode=decodeURIComponent(getParam("orderCode"));
+    if(!orderCode){
+      weui.toast("订单号异常",{
+        duration: 2000,
+        className: 'custom-toast',
+	    });
+    }
+    $(".orderCode").text(orderCode);
+    $DoPost("/subscribepay/order/getOrderPayAllMsg",{"orderCode":orderCode},function(r){
+      if(r.success){
+        //下单时间
+        if(r.data.order.prepay_time) $(".prepayTime").text(r.data.order.prepay_time.replace("-",".").replace("-","."));
+        //产品类型
+        if(r.data.order.product_type) $(".productType").text(r.data.order.product_type);
+        //价格
+        if(r.data.order.original_price) $(".price").text(r.data.order.original_price/100);
+        
+        //订单条件        
+        if(r.data.order.filter){
+            var filterObj=JSON.parse(r.data.order.filter);
+            //省份数 城市数
+            if(!$.isEmptyObject(filterObj.area)){
+              var cityNum=0;
+              var provinceNum=0;
+              for(var i in filterObj.area) {
+                let citys=filterObj.area[i]
+                if(citys.length>0){
+                  cityNum+=citys.length;
+                }else{
+                  provinceNum++;
+                }
+              }
+              var areaText="";//1个省级区域、4个地市
+              if(provinceNum>0) areaText= areaText + provinceNum+"个省级区域";
+              if(cityNum>0){
+                console.log(areaText)
+                if(provinceNum>0) areaText= areaText+"、"
+                console.log(areaText)
+                areaText = areaText+ cityNum+"个地市";
+              }
+              $(".areaNum").text(areaText);
+            }else{
+              $(".areaNum").text("全国");
+            }
+         
+          
+          //行业数
+          if(filterObj.industry.length!=0){
+            $(".industryNum").text(filterObj.industry.length+"个行业");
+          }else{
+            $(".industryNum").text("全行业");
+          }
+          
+          //周期数
+          $(".cyclecount").text(filterObj.cyclecount);
+          //周期单位
+          if(filterObj.cycleunit==1){
+            $(".cycleunit").text("年")
+          }else if(filterObj.cycleunit==2){
+            $(".cycleunit").text("个月")
+          }
+        }
+        
+        if(r.data.order.order_status==0){
+          //未支付
+          $("#pageTitle").text("代付款");
+          $(".invoice").css("display","none");//隐藏开发票
+          $(".button.align").css("display","").on("click",function(){//显示去支付按钮
+            if(!canpay)return  
+            canpay=false;
+            $DoPost("/front/vipsubscribe/orderToPay",{"orderCode":orderCode},function(r){
+              if(r.success){
+                onBridgeReady(JSON.parse(r.data.res),orderCode);
+              }else{
+                canpay=true;
+              }
+            })
+          })
+        }else{
+          $("#pageTitle").text("已完成");
+          //支付时间
+          $(".line_paytime").css("display","");
+          if(r.data.order.pay_time) $(".payTime").text(r.data.order.pay_time.replace("-",".").replace("-","."));
+          //支付方式
+          $(".line_payway").css("display","");
+          if(r.data.order.pay_way.indexOf("wx")>-1){
+            $(".payWay").text("微信支付");
+          }else{
+            $(".payWay").text("支付宝支付");
+          }
+          //自动续费
+          $(".line_autoPay").css("display","");          
+          
+          //支付订单号
+          $(".line_transaction").css("display","");
+          if(r.data.transaction_id) $(".transaction_id").text(r.data.transaction_id);
+          
+          //发票
+          if(r.data.order.applybill_status==0){ 
+            //已支付未申请发票
+            $(".invoice .invoicing").css("display","");
+          }else{
+            //已支付已申请发票
+            alert("铺发票信息")
+          } 
+          
+          //有效周期
+          $(".line_cycle").css("display","");
+          //有效日期  
+          if(r.data.time.l_vip_starttime&&r.data.time.l_vip_endtime){
+            $(".serviceTime").text(formatEffectiveDate(r.data.time.l_vip_starttime,r.data.time.l_vip_endtime))
+          }
+        }
+                
+      }
+      //调用微信支付接口
+  		function onBridgeReady(res,ordercode){
+  		   	WeixinJSBridge.invoke('getBrandWCPayRequest',{
+  		    		"appId": res["appId"],
+  		          	"timeStamp": res["timestamp"],
+  		          	"nonceStr": res["nonceStr"],
+  		          	"package": res["prepayId"],
+  		          	"signType": res["signType"],
+  		         	"paySign": res["sign"]
+  				},
+  				function(r){
+  			    if(r.err_msg == "get_brand_wcpay_request:ok"){
+  						setTimeout(function(){
+  							window.location.replace("/front/vipsubscribe/toPaySuccessPage?orderCode="+ordercode);
+  						},500)
+  					}else if(r.err_msg == "get_brand_wcpay_request:cancel"){
+  						//取消支付 可以再次支付
+              canpay=true;
+              alert("开发环境【支付跳转完成】")
+              try{
+  							window.location.replace("/front/vipsubscribe/toPaySuccessPage?orderCode="+ordercode);
+              }catch(e){
+                alert(e)
+              }
+  					}else{
+              weui.toast("系统异常,请稍微再试",{
+                duration: 2000,
+                className: 'custom-toast',
+              });
+  				  }
+  			});
+  		}
+    })
+    function formatEffectiveDate(strat,end){
+      var startDate = new Date(strat*1000);
+      var endDate = new Date(end*1000);
+      return formatDate(startDate)+" - "+formatDate(endDate)
+    }
+    function formatDate(d){
+     return (d.getFullYear()) + "." + 
+     (Array(2).join(0)+(d.getMonth() + 1)).slice(-2) + "." +
+     (Array(2).join(0)+(d.getDate())).slice(-2);
+    }
+  })
+      
+</script>
 </html>

+ 60 - 5
src/web/templates/weixin/vipsubscribe/vip_pay_success.html

@@ -20,22 +20,77 @@
 				<div class="info_box">
                     <div class="pay_mode">
                         <span>支付方式</span>
-                        <span>支付宝支付</span>
+                        <span class="payway"></span>
                     </div>
                     <div class="pay_time">
                         <span>支付时间</span>
-                        <span>2019/07/31 16:29:57</span>
+                        <span class="paytime"></span>
                     </div>
                     <div class="pay_id">
                         <span>订单编号</span>
-                        <span>6278781990899909</span>
+                        <span class="orderCode"></span>
                     </div>
                 </div>
 			</div>
 			<div class="bottom_button">
-        <button class="left_btn" onclick="window.location.href ='/front/vipsubscribe/toOrderDetailPage'">查看订单</button>
-        <button class="right_btn" onclick="window.location.href ='/front/vipsubscribe/toSetKeyWordPage'">设置关键词</button>
+        <button class="left_btn" >查看订单</button>
+        <button class="right_btn" >设置关键词</button>
 			</div>
 		</div>
 	</body>
+  <script src="/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
+  <script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
+  <script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
+  <script src="/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
+  <script>
+    /*
+    //此方法支付时间不准
+    $(function(){
+      var orderCode=decodeURIComponent(getParam("orderCode"))
+      var payTimestamp=decodeURIComponent(getParam("payTime"))
+      var payway=decodeURIComponent(getParam("payway"))
+      
+      var d = new Date(payTimestamp * 1000);    //根据时间戳生成的时间对象
+      var payTime = (d.getFullYear()) + "/" + 
+                 (Array(2).join(0)+(d.getMonth() + 1)).slice(-2) + "/" +
+                 (Array(2).join(0)+(d.getDate())).slice(-2)+ " " + 
+                 (Array(2).join(0)+(d.getHours())).slice(-2)+ ":" + 
+                 (Array(2).join(0)+(d.getMinutes())).slice(-2) + ":" + 
+                 (Array(2).join(0)+(d.getSeconds())).slice(-2);
+                
+      $(".paytime").text(payTime);
+      $(".orderCode").text(orderCode);
+      $(".payway").text(payway);
+       
+    })*/
+    $(function(){
+      //查看订单
+      $(".left_btn").on("click",function(){
+        window.location.href ='/front/vipsubscribe/toOrderDetailPage?orderCode='+orderCode
+      })
+      //设置关键词
+      $(".right_btn").on("click",function(){
+        window.location.href ='/front/vipsubscribe/toSetKeyWordPage'
+      }) 
+      
+      var orderCode=decodeURIComponent(getParam("orderCode"));
+      $(".orderCode").text(orderCode);
+      $DoPost("/subscribepay/order/getOrderPayMsg",{"orderCode":orderCode},function(r){
+        if(r.success){
+          if(r.pay_time){
+            $(".paytime").text(r.pay_time.replace("-","/").replace("-","/"));
+          }
+          if(r.pay_way){
+            var payway
+            if(r.pay_way.indexOf("wx")>-1){
+              payway="微信支付"
+            }else{
+              payway="支付宝支付"
+            }
+            $(".payway").text(payway);
+          }
+        }
+      })
+    })
+  </script>
 </html>

+ 72 - 10
src/web/templates/weixin/vipsubscribe/vip_purchase.html

@@ -223,7 +223,7 @@
                                 <p><img src="/vipsubscribe/image/weixin.png?v={{Msg "seo" "version"}}">微信支付</p>
                             </div>
                             <div class="weui-cell__hd">
-                                <input type="radio" class="weui-check" name="way" value="wx" id="wx" checked />
+                                <input type="radio" class="weui-check" name="way" value="wx_js" id="wx" checked />
                                 <i class="weui-icon-checked"></i>
                             </div>
                         </label>
@@ -246,7 +246,33 @@
     <script src="/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
     <script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
     <script>
- 
+			var signature = {{.T.signature}};
+			var isConfigSuccess = true;
+			var id = {{.T._id}}
+			if(signature && signature.length == 4){
+				wx.config({
+				    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+				    appId: signature[0], // 必填,公众号的唯一标识
+				    timestamp:signature[1], // 必填,生成签名的时间戳
+				    nonceStr: signature[2], // 必填,生成签名的随机串
+				    signature: signature[3],// 必填,签名,见附录1
+				    jsApiList: ['chooseWXPay','hideAllNonBaseMenuItem'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+				});
+				wx.ready(function () {
+					if(!isConfigSuccess){
+						return;
+					}
+					wx.hideAllNonBaseMenuItem();
+			    });
+				wx.error(function(res){
+				    //config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
+					//alert(res);
+					isConfigSuccess = false;
+				});
+			}
+		</script>
+    
+    <script>
       var purchase = {
         areaSelect:{},//已选择地区
         industrySelect:[],
@@ -476,6 +502,8 @@
             });
             
             $('#payHandle').click(function () {
+                if(!canpay)return
+                canpay=false
                 //支付请求
                 var area=purchase.areaSelect;
                 var industry=purchase.industrySelect;
@@ -487,16 +515,12 @@
                 }
                 var payWay=$('input:radio[name="way"]:checked').val();
                 var time=$(".info:eq(2)").val().trim();
-
-                console.log(area,industry,time,payWay)
-                $DoPost("/subscribepay/order/toPay",{"area":area,"industry":industry.join(","),"time":time,"payWay":payWay},function(r){
+              
+                $DoPost("/front/vipsubscribe/createOrder",{"area":JSON.stringify(area),"industry":industry.join(","),"time":time,"payWay":payWay},function(r){
                   if(r.success){
-                    $(".phone").val(r.phoneNum);
-                    check_tel($('.phone'),$('.code_btn'),false);
+                    onBridgeReady(JSON.parse(r.data.res),r.data.code);
                   }
                 })
-                return
-                window.location.href = "/front/vipsubscribe/toPaySuccessPage"
             })
           
         })
@@ -522,7 +546,45 @@
           }
           sessionStorage.setItem("vipSub_read",checked)
         }
-        
+      var canpay=true; 
+      //调用微信支付接口
+			function onBridgeReady(res,ordercode){
+			   	WeixinJSBridge.invoke('getBrandWCPayRequest',{
+			    		"appId": res["appId"],
+			          	"timeStamp": res["timestamp"],
+			          	"nonceStr": res["nonceStr"],
+			          	"package": res["prepayId"],
+			          	"signType": res["signType"],
+			         	"paySign": res["sign"]
+					},
+					function(r){
+				    if(r.err_msg == "get_brand_wcpay_request:ok"){
+							//清除我已阅读缓存
+							sessionStorage.removeItem("vipSubSelectArea");
+							sessionStorage.removeItem("vipSubSelectIndustry");
+							sessionStorage.removeItem("vipSub_read");
+							$(".enter").attr("disabled","disabled");
+							setTimeout(function(){
+								window.location.replace("/front/vipsubscribe/toPaySuccessPage?orderCode="+ordercode);
+							},500)
+						}else if(r.err_msg == "get_brand_wcpay_request:cancel"){
+							//取消支付 可以再次支付
+              canpay=true;
+              
+              alert("开发环境【支付跳转完成】")
+              try{
+								window.location.replace("/front/vipsubscribe/toPaySuccessPage?orderCode="+ordercode);
+              }catch(e){
+                alert(e)
+              }
+						}else{
+              weui.toast("系统异常,请稍微再试",{
+                duration: 2000,
+                className: 'custom-toast',
+              });
+					  }
+				});
+			}  
     </script>
 </body>