Bladeren bron

Merge branch 'dev2.8.5' of http://192.168.3.207:10080/qmx/jy into dev2.8.5

wangshan 5 jaren geleden
bovenliggende
commit
498f343d94
28 gewijzigde bestanden met toevoegingen van 437 en 615 verwijderingen
  1. 0 30
      src/jfw/front/dataExport.go
  2. 13 13
      src/jfw/front/vipsubscribe.go
  3. 3 0
      src/jfw/front/wxMyOrder.go
  4. 9 10
      src/jfw/modules/subscribepay/src/entity/dataexport.go
  5. 110 18
      src/jfw/modules/subscribepay/src/entity/subscribeVip.go
  6. 57 34
      src/jfw/modules/subscribepay/src/pay/aliPay.go
  7. 27 7
      src/jfw/modules/subscribepay/src/pay/util.go
  8. 5 4
      src/jfw/modules/subscribepay/src/pay/wxPay.go
  9. 31 1
      src/jfw/modules/subscribepay/src/service/commonAction.go
  10. 5 3
      src/jfw/modules/subscribepay/src/service/dataExportPay_mobile.go
  11. 3 27
      src/jfw/modules/subscribepay/src/service/dataExportPay_pc.go
  12. 14 67
      src/jfw/modules/subscribepay/src/service/orderListDetails.go
  13. 3 1
      src/jfw/modules/subscribepay/src/service/payCallback.go
  14. 4 4
      src/jfw/modules/subscribepay/src/service/vipSubscribeEdit.go
  15. 47 34
      src/jfw/modules/subscribepay/src/service/vipSubscribePay.go
  16. 5 3
      src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go
  17. 1 0
      src/web/staticres/vipsubscribe/css/choose_area.css
  18. 1 0
      src/web/staticres/vipsubscribe/css/choose_industry.css
  19. 2 0
      src/web/staticres/vipsubscribe/css/vip_order_detail.css
  20. 8 4
      src/web/templates/pc/myOrder.html
  21. 1 1
      src/web/templates/weixin/dataExport/dataExport_applyInvoice.html
  22. 22 317
      src/web/templates/weixin/dataExport/dataExport_toMyOrder.html
  23. 5 1
      src/web/templates/weixin/my.html
  24. 5 4
      src/web/templates/weixin/vipsubscribe/edit_subscribe.html
  25. 1 1
      src/web/templates/weixin/vipsubscribe/edit_subscribe_city.html
  26. 2 2
      src/web/templates/weixin/vipsubscribe/vip_introduce.html
  27. 42 24
      src/web/templates/weixin/vipsubscribe/vip_order_detail.html
  28. 11 5
      src/web/templates/weixin/vipsubscribe/vip_purchase.html

+ 0 - 30
src/jfw/front/dataExport.go

@@ -6,8 +6,6 @@ import (
 	"errors"
 	"fmt"
 	"jfw/config"
-
-	//	"jfw/pay"
 	"jfw/public"
 	"log"
 	"qfw/util"
@@ -28,7 +26,6 @@ type DataExport struct {
 	sieveData     xweb.Mapper `xweb:"/front/dataExport/sieveData"`           //筛选数据
 	toMyOrder     xweb.Mapper `xweb:"/front/dataExport/toMyOrder"`           //我的订单
 	queryOrder    xweb.Mapper `xweb:"/front/dataExport/queryOrder"`          //查询我的订单
-	deleteOrder   xweb.Mapper `xweb:"/front/dataExport/deleteOrder"`         //删除订单
 	toOrderDetail xweb.Mapper `xweb:"/front/dataExport/toOrderDetail/(.*)"`  //订单详情
 	getOrderCode  xweb.Mapper `xweb:"/front/dataExport/getOrderCode/(\\w+)"` //申请发票获取订单编号
 
@@ -262,33 +259,6 @@ func (d *DataExport) CancelOrder() error {
 	return nil
 }
 
-/**
-
-根据 id+openid 删除
-*/
-func (d *DataExport) DeleteOrder() error {
-	if userId := d.GetSession("userId"); userId != nil {
-		queryMap := map[string]interface{}{
-			"id":      d.GetString("id"),
-			"user_id": userId.(string),
-		}
-		flag := false
-		order := public.Mysql.FindOne(tableName_order, queryMap, "pay_way,out_trade_no,prepay_time,order_status", "")
-		if order != nil {
-			if util.IntAll((*order)["order_status"]) == 0 { //未支付状态下 删除订单需要先关闭订单
-				//flag = pay.CloseDataExportOrder(util.ObjToString((*order)["pay_way"]), util.ObjToString((*order)["out_trade_no"]), util.ObjToString((*order)["prepay_time"]))
-			} else {
-				flag = true
-			}
-		}
-		if flag {
-			flag = public.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -1})
-		}
-		d.ServeJson(map[string]interface{}{"success": flag})
-	}
-	return nil
-}
-
 /**
 根据 订单编号+userId 查询
 */

+ 13 - 13
src/jfw/front/vipsubscribe.go

@@ -12,19 +12,19 @@ import (
 
 type Subscribepay struct {
 	*xweb.Action
-	introduce         xweb.Mapper `xweb:"/front/vipsubscribe/introducePage"`       //订阅收费介绍页
-	trialInfo         xweb.Mapper `xweb:"/front/vipsubscribe/trialInfo"`           //vip订阅服务-用户信息录入页面
-	toPurchasePage    xweb.Mapper `xweb:"/front/vipsubscribe/toPurchasePage/(.*)"` //订阅收费购买页面(试用用户)
-	toChooseArea      xweb.Mapper `xweb:"/front/vipsubscribe/toChooseArea"`        //订阅收费地区筛选
-	toChooseIndustry  xweb.Mapper `xweb:"/front/vipsubscribe/toChooseIndustry"`    //订阅收费行业筛选
-	toPaySuccessPage  xweb.Mapper `xweb:"/front/vipsubscribe/toPaySuccessPage"`    //订阅支付完成页面
-	toOrderDetailPage xweb.Mapper `xweb:"/front/vipsubscribe/toOrderDetailPage"`   //订阅收费支付订单详情页面
-	toSetKeyWordPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetKeyWordPage"`    //订阅收费设置关键词
-	toSetPage         xweb.Mapper `xweb:"/front/vipsubscribe/toSetPage"`           //订阅收费设置
-	toSetInfoTypePage xweb.Mapper `xweb:"/front/vipsubscribe/toSetInfoTypePage"`   //订阅收费设置信息类型
-	toSetPushSetPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetPushSetPage"`    //订阅收费推送设置
-	toSetOtherKwsPage xweb.Mapper `xweb:"/front/vipsubscribe/toSet(.*)Page"`       //订阅收费附加词和排除词设置
-	toVIPViewPage     xweb.Mapper `xweb:"/front/vipsubscribe/toVIPViewPage"`       //订阅收费预览
+	introduce         xweb.Mapper `xweb:"/front/vipsubscribe/introducePage"`     //订阅收费介绍页
+	trialInfo         xweb.Mapper `xweb:"/front/vipsubscribe/trialInfo"`         //vip订阅服务-用户信息录入页面
+	toPurchasePage    xweb.Mapper `xweb:"/weixin/pay/vipsubscribe_(.*)"`         //订阅收费购买页面(试用用户)
+	toChooseArea      xweb.Mapper `xweb:"/front/vipsubscribe/toChooseArea"`      //订阅收费地区筛选
+	toChooseIndustry  xweb.Mapper `xweb:"/front/vipsubscribe/toChooseIndustry"`  //订阅收费行业筛选
+	toPaySuccessPage  xweb.Mapper `xweb:"/front/vipsubscribe/toPaySuccessPage"`  //订阅支付完成页面
+	toOrderDetailPage xweb.Mapper `xweb:"/front/vipsubscribe/toOrderDetailPage"` //订阅收费支付订单详情页面
+	toSetKeyWordPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetKeyWordPage"`  //订阅收费设置关键词
+	toSetPage         xweb.Mapper `xweb:"/front/vipsubscribe/toSetPage"`         //订阅收费设置
+	toSetInfoTypePage xweb.Mapper `xweb:"/front/vipsubscribe/toSetInfoTypePage"` //订阅收费设置信息类型
+	toSetPushSetPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetPushSetPage"`  //订阅收费推送设置
+	toSetOtherKwsPage xweb.Mapper `xweb:"/front/vipsubscribe/toSet(.*)Page"`     //订阅收费附加词和排除词设置
+	toVIPViewPage     xweb.Mapper `xweb:"/front/vipsubscribe/toVIPViewPage"`     //订阅收费预览
 
 	//修改
 	toEditSubPage     xweb.Mapper `xweb:"/front/vipsubscribe/toEditSubPage"`     //订阅收费修改页面

+ 3 - 0
src/jfw/front/wxMyOrder.go

@@ -173,6 +173,9 @@ func (w *WxMyOrder) MyMenu() error {
 		if util.ObjToString((*res)["s_myemail"]) == "" {
 			w.T["isNoEmail"] = true
 		}
+		if util.Int64All((*res)["i_vip_status"]) == 1 || util.Int64All((*res)["i_vip_status"]) == 2 {
+			w.T["isVip"] = true
+		}
 	}
 	//分享
 	w.T["signature"] = wx.SignJSSDK(w.Site() + w.Url())

+ 9 - 10
src/jfw/modules/subscribepay/src/entity/dataexport.go

@@ -20,7 +20,7 @@ import (
 
 var ExConf *DataexportConfig
 
-func init()  {
+func init() {
 	qutil.ReadConfig("./dataexport.json", &ExConf)
 }
 
@@ -71,14 +71,14 @@ func (m *myWrite) Write(p []byte) (n int, err error) {
 	return
 }
 
-type dataExportStruct struct {}
+type dataExportStruct struct{}
 
 var JyDataExportStruct dataExportStruct
 
 //数据导出支付完成回调方法
-func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
+func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool {
 	now := time.Now()
-	update:=false
+	update := false
 	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
 		"out_trade_no": param.OutTradeno,
 		"order_money":  param.TotalFee,
@@ -91,8 +91,8 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
 		if order_status == 0 {
 			update = util.Mysql.Update("dataexport_order", map[string]interface{}{
 				"order_status": 0,
-				"out_trade_no":  param.OutTradeno ,
-				"order_money":  param.TotalFee ,
+				"out_trade_no": param.OutTradeno,
+				"order_money":  param.TotalFee,
 				//"user_openid":  openid,
 			}, map[string]interface{}{
 				"pay_money":    param.CashFee,
@@ -102,8 +102,8 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
 			})
 			if update {
 				//先发个通知
-				go SendNotice(orderdata, float64(param.CashFee) / 100, pay_time, download_url, config.GmailAuth)
-				go SendMailToPayUser(orderdata, float64(param.CashFee) / 100, pay_time, filename, download_url, config.GmailAuth)
+				go SendNotice(orderdata, float64(param.CashFee)/100, pay_time, download_url, config.GmailAuth)
+				go SendMailToPayUser(orderdata, float64(param.CashFee)/100, pay_time, filename, download_url, config.GmailAuth)
 				go SendMailToBJFinance(orderdata, pay_time, param.TransactionId, 1, config.GmailAuth)
 			}
 		} else {
@@ -113,7 +113,6 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
 	return update
 }
 
-
 //发送邮箱验证码
 func SendMailIdentCode(to, code string, auth []*mail.GmailAuth) bool {
 	html := fmt.Sprintf(`<div>
@@ -121,7 +120,7 @@ func SendMailIdentCode(to, code string, auth []*mail.GmailAuth) bool {
 			%s,您好!
 		</div>
 		<div style="padding: 20px 70px 10px 70px;">
-			<p>您正在进行导出邮箱地址验证,请在邮件验证码输入框输入下方验证码:</p>
+			<p>您正在进行绑定邮箱地址验证,请在邮件验证码输入框输入下方验证码:</p>
 			<span style="font-weight: bold;font-size: x-large;">%s</span>
 			<p>请勿向任何人泄露您收到的验证码。</p>
 			<p>如果您没有使用剑鱼标讯,请忽略此邮件。</p>

+ 110 - 18
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -1,6 +1,8 @@
 package entity
+
 //vip订阅公共方法
 import (
+	"encoding/json"
 	"log"
 	"time"
 	"util"
@@ -10,20 +12,97 @@ import (
 	qutil "qfw/util"
 )
 
-//设置开始试用
-func StartTrial(userId string, area *map[string]interface{}, industry []string) bool {
+type vipSubscribeStruct struct{}
+
+var JyVipSubStruct vipSubscribeStruct
+
+type VipSimpleMsg struct {
+	Id         string                  `json:"_id"`
+	Area       *map[string]interface{} `json:"area"`
+	Industry   []string                `json:"industry"`
+	Cyclecount int                     `json:"cyclecount"`
+	Cycleunit  int                     `json:"cycleunit"`
+}
+
+//支付完成回调
+func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) (ok bool) {
+	now := time.Now()
+	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
+		"out_trade_no": param.OutTradeno,
+		"order_money":  param.TotalFee,
+	}, "id,filter,order_code,order_status,user_id", "")
+	pay_time := qutil.FormatDate(&now, qutil.Date_Full_Layout)
+	if orderdata != nil {
+		order_status := qutil.IntAll((*orderdata)["order_status"])
+		if order_status == 0 {
+			//计算时长
+			vmsg := VipSimpleMsg{}
+			filterStr := qutil.ObjToString((*orderdata)["filter"])
+			userid := qutil.ObjToString((*orderdata)["user_id"])
+			if err := json.Unmarshal([]byte(filterStr), &vmsg); err != nil {
+				log.Printf("%s vipSubscribeStruct PayCallBack Unmarshal 出错 [%s]\n", userid, filterStr)
+			}
+			startTime := time.Now()
+			var endTime time.Time
+			if vmsg.Cycleunit == 1 { //年
+				endTime = startTime.AddDate(vmsg.Cyclecount, 0, 0)
+			} else if vmsg.Cycleunit == 2 { //月
+				endTime = startTime.AddDate(0, vmsg.Cyclecount, 0)
+			}
+			update := util.Mysql.Update("dataexport_order", map[string]interface{}{
+				"order_status": 0,
+				"out_trade_no": param.OutTradeno,
+				"order_money":  param.TotalFee,
+				//"user_openid":  openid,
+			}, map[string]interface{}{
+				"pay_money":     param.CashFee,
+				"pay_time":      pay_time,
+				"order_status":  1,
+				"vip_starttime": qutil.FormatDate(&startTime, qutil.Date_Full_Layout),
+				"vip_endtime":   qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
+			})
+			if update {
+				if JyVipSubStruct.StartSubVip(userid, vmsg.Area, vmsg.Industry, startTime, endTime, false) {
+					ok = true
+				}
+			}
+		} else {
+			ok = true
+		}
+	}
+	return ok
+}
+
+//设置开始使用
+func (this *vipSubscribeStruct) StartSubVip(userId string, area *map[string]interface{}, industry []string, startTime, endTime time.Time, isTrial bool) bool {
+	buyset := [3]int{-1, -1, -1}
+	//a_buyset 计算  0:省份数量 1:城市数量 2:行业数量
+	if !isTrial {
+		if len(*area) > 0 {
+			areaCount := JyVipSubStruct.GetBuyAreaCount(area)
+			buyset[0] = areaCount[0] //省份数量
+			buyset[1] = areaCount[1] //城市数量
+		} else {
+			buyset[0] = -1
+			buyset[1] = -1
+		}
+		if len(industry) > 0 {
+			buyset[2] = len(industry) //行业数量
+		} else {
+			buyset[2] = -1
+		}
+	}
+
 	//计算服务时间
-	startTime := time.Now()
-	endTime := startTime.AddDate(0, 0, 7)
 	if !util.MQFW.UpdateById("user", userId,
 		bson.M{"$set": bson.M{
-			"o_vipjy.i_trial":      -1,                //已激活试用
-			"o_vipjy.o_area":       area,              //试用设置地区
-			"o_vipjy.a_buyerclass": industry,          //试用设置行业
-			"o_vipjy.a_buyset":     []int{-1, -1, -1}, //购买内容 城市、省份、行业数量
-			"l_vip_starttime":      startTime.Unix(),  //开始时间
-			"l_vip_endtime":        endTime.Unix(),    //结束时间
-			"i_vip_status":         1,                 //1试用 2正式
+			"o_vipjy.i_trial":      -1,                      //已激活试用
+			"o_vipjy.o_area":       area,                    //试用设置地区
+			"o_vipjy.a_buyerclass": industry,                //试用设置行业
+			"o_vipjy.a_buyset":     buyset,                  //购买内容 城市、省份、行业数量
+			"l_vip_starttime":      startTime.Unix(),        //开始时间
+			"l_vip_endtime":        endTime.Unix(),          //结束时间
+			"i_vip_status":         qutil.If(isTrial, 1, 2), //1试用 2正式
 		}}) {
 		return false
 	}
@@ -31,17 +110,17 @@ func StartTrial(userId string, area *map[string]interface{}, industry []string)
 }
 
 //查询是否有试用权限
-func CanTrial(userId string) bool {
+func (this *vipSubscribeStruct) CanTrial(userId string) bool {
 	m, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1}`)
 	if m == nil || len(*m) == 0 || !ok {
 		return false
 	}
 	obj := qutil.ObjToMap((*m)["o_vipjy"])
-	if qutil.IntAll((*obj)["i_trial"]) != 1 {//是否有试用资格
+	if qutil.IntAll((*obj)["i_trial"]) != 1 { //是否有试用资格
 		return false
 	}
 	//是否使用过(使用过VIP订阅功能,就不能试用)
-	if qutil.IntAll((*m)["i_vip_status"])!=0{  //开启状态:0-暂不使用vip订阅 1-试用 2-正式 -1-试用到期 -2-正式到期
+	if qutil.IntAll((*m)["i_vip_status"]) != 0 { //开启状态:0-暂不使用vip订阅 1-试用 2-正式 -1-试用到期 -2-正式到期
 		return false
 	}
 	return true
@@ -49,7 +128,7 @@ func CanTrial(userId string) bool {
 
 //获取省份,城市,行业购买数量;-1为全部
 //[省份,城市,行业]
-func GetBuySet(userId string) (result [3]int) {
+func (this *vipSubscribeStruct) GetBuySet(userId string) (result [3]int) {
 	mData, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1}`)
 	if !ok || len(*mData) == 0 || mData == nil {
 		return
@@ -62,10 +141,10 @@ func GetBuySet(userId string) (result [3]int) {
 }
 
 //根据区域获取城市和省份数量
-func GetBuyAreaCount(area map[string]interface{}) (result [2]int) {
+func (this *vipSubscribeStruct) GetBuyAreaCount(area *map[string]interface{}) (result [2]int) {
 	p := []interface{}{} //省份
 	c := []interface{}{} //城市
-	for k, v := range area {
+	for k, v := range *area {
 		tmp := v.([]interface{})
 		if len(tmp) == 0 { //省份
 			result[0]++
@@ -80,7 +159,7 @@ func GetBuyAreaCount(area map[string]interface{}) (result [2]int) {
 }
 
 //计算价格
-func GetSubVipPrice(area *map[string]interface{}, industry []string, count, unit int) int {
+func (this *vipSubscribeStruct) GetSubVipPrice(area *map[string]interface{}, industry []string, count, unit int) int {
 	if len(*area) == 0 { //全国
 		if len(industry) == 1 {
 			return getSetMealPrice(0, 1, unit) * count //全国1行业套餐
@@ -177,3 +256,16 @@ func getSetMealPrice(c, i, u int) int {
 		}
 	}
 }
+
+//支付成功后,将该订单以外的所有订单状态改为已取消状态 已取消:-2
+func PayCancel(userId string) bool {
+	//参数:查询语句,不等语句,修改条件
+	bl := util.Mysql.Update("dataexport_order", bson.M{
+		"user_id":      userId,
+		"product_type": "vip订阅",
+		"order_status": 0,
+	}, bson.M{
+		"order_status": -2,
+	})
+	return bl
+}

+ 57 - 34
src/jfw/modules/subscribepay/src/pay/aliPay.go

@@ -17,7 +17,7 @@ import (
 	"time"
 )
 
-type AliPayStruct struct {
+type aliPayStruct struct {
 	Appid          string
 	PrivateKey     *rsa.PrivateKey //请求接口秘钥
 	AliPublicKey   *rsa.PublicKey  //支付完成回调,校验使用(取支付宝后台)
@@ -28,7 +28,7 @@ type AliPayStruct struct {
 	Subject_subvip string          //支付小标题
 }
 
-var Alipay *AliPayStruct
+var Alipay *aliPayStruct
 
 func init() {
 	//加载本地私钥
@@ -41,7 +41,7 @@ func init() {
 	if err != nil {
 		panic(err)
 	}
-	Alipay = &AliPayStruct{
+	Alipay = &aliPayStruct{
 		Appid:          qutil.ObjToString(config.AliPayConf["appid"]),
 		PrivateKey:     privateKey,
 		AliPublicKey:   aliPublicKey,
@@ -54,6 +54,13 @@ func init() {
 }
 
 const (
+	//支付宝接口
+	Method_Type_Create_Pc  = "alipay.trade.page.pay" //支付宝获取pc端支付接口
+	Method_Type_Create_App = "alipay.trade.app.pay"  //支付宝获取App端支付接口
+	Method_Tpye_Cancel     = "alipay.trade.cancel"   //支付宝取消订单接口(若已支付24h调用,则会退款)
+	Method_Type_Close      = "alipay.trade.close"    //支付宝订单关闭接口
+
+	//订单标识
 	ALI_DATAEXPORT_NATIVE = "z" //支付宝数据导出-扫码支付
 	ALI_DATAEXPORT_APP    = "Z" //支付宝数据导出-app支付
 	ALI_DATAREPORT_APP    = "X" //支付宝数据报告-app支付
@@ -61,7 +68,7 @@ const (
 	ALI_SUBVIP_APP        = "Y" //支付宝数vip订阅--扫码支付
 )
 
-func (w *AliPayStruct) GetTradeno(tradenoSign string) (string, string) {
+func (w *aliPayStruct) GetTradeno(tradenoSign string) (string, string) {
 	tradeno, subject := "", ""
 	if tradenoSign == ALI_DATAEXPORT_NATIVE || tradenoSign == ALI_DATAEXPORT_APP {
 		subject = w.Subject_sjdc
@@ -75,7 +82,7 @@ func (w *AliPayStruct) GetTradeno(tradenoSign string) (string, string) {
 }
 
 //获取网页支付二维码地址
-func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, tradenoSign string) (string, string, error) {
+func (a *aliPayStruct) GetOrderPayParam(order_money float64, time_expire, tradenoSign string) (string, string, error) {
 	//支付标题
 	tradeno, subject := a.GetTradeno(tradenoSign)
 	var bizByte []byte
@@ -95,7 +102,7 @@ func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, traden
 			TimeoutExpress: "2h",
 		}
 		bizByte, _ = json.Marshal(bizContent)
-		methodStr = "alipay.trade.app.pay"
+		methodStr = Method_Type_Create_App
 	} else { //扫码支付
 		bizContent := struct {
 			Subject      string  `json:"subject"`
@@ -115,7 +122,7 @@ func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, traden
 			Time_expire:  time_expire,
 		}
 		bizByte, _ = json.Marshal(bizContent)
-		methodStr = "alipay.trade.page.pay"
+		methodStr = Method_Type_Create_Pc
 	}
 
 	var data = url.Values{}
@@ -143,7 +150,7 @@ func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, traden
 }
 
 //校验回调sign
-func (a *AliPayStruct) CheckCallBackSign(param, sign string) bool {
+func (a *aliPayStruct) CheckCallBackSign(param, sign string) bool {
 	newHash := sha256.New()
 	newHash.Write([]byte(param))
 	hashed := newHash.Sum(nil)
@@ -163,60 +170,76 @@ func (a *AliPayStruct) CheckCallBackSign(param, sign string) bool {
 	return true
 }
 
-//支付宝关闭订单(生成的订单二维码,未扫码无法关闭订单)
-func (a *AliPayStruct) CloseOrder(tradeno string) bool {
-	toClose := struct {
-		OutTradeNo string `json:"out_trade_no"`
-	}{
-		OutTradeNo: tradeno,
-	}
-	bizbyte, err := json.Marshal(toClose)
-	if err != nil {
-		log.Println()
-		return false
-	}
+//支付宝支付统一HTTP调用接口
+func (a *aliPayStruct) DoRequest(content, tradeno, methodType string) (*map[string]interface{}, error) {
 	var data = url.Values{}
 	data.Add("app_id", Alipay.Appid)
-	data.Add("method", "alipay.trade.close")
+	data.Add("method", methodType)
 	data.Add("format", "json")
 	data.Add("charset", "UTF-8")
 	data.Add("sign_type", "RSA2")
 	data.Add("timestamp", time.Now().Format("2006-01-02 15:04:05"))
 	data.Add("version", "1.0")
-	data.Add("biz_content", string(bizbyte))
+	data.Add("biz_content", content)
 	signContentBytes, _ := url.QueryUnescape(data.Encode())
 	log.Println(signContentBytes)
 	signature, err := a.getSign([]byte(signContentBytes))
 	if err != nil {
-		log.Println(tradeno, "获取签名出错", err)
-		return false
+		return nil, err
 	}
 	data.Add("sign", signature)
 
 	url := a.Requseturl + "?" + data.Encode()
-	//clien 优化
 	client := http.Client{Jar: nil}
 	req, _ := http.NewRequest("POST", url, nil)
 	res, err := client.Do(req)
 	if err != nil {
-		log.Printf("%s支付宝关闭订单  请求出错%v\n", tradeno, err)
-		return false
+		return nil, err
 	}
 	bArr, err := ioutil.ReadAll(res.Body)
 	if err != nil {
-		log.Printf("%s支付宝关闭订单  读取相应出错%v\n", tradeno, err)
-		return false
+		return nil, err
 	}
 	m := map[string]interface{}{}
 	err = json.Unmarshal(bArr, &m)
+	return &m, nil
+}
+
+//支付宝关闭订单(生成的订单二维码,未扫码无法关闭订单)
+func (a *aliPayStruct) CloseOrder(tradeno string) bool {
+	toClose := struct {
+		OutTradeNo string `json:"out_trade_no"`
+	}{
+		OutTradeNo: tradeno,
+	}
+	bizbyte, _ := json.Marshal(toClose)
+	resMap, err := Alipay.DoRequest(string(bizbyte), tradeno, Method_Type_Close)
 	if err != nil {
-		log.Println(string(bArr))
-		log.Println("%s支付宝关闭订单   解析相应参数出错%v\n", tradeno, err)
+		log.Printf("%s 支付宝关闭订单出错 %v\n", tradeno, err)
 	}
-	msg := (*qutil.ObjToMap(m["alipay_trade_close_response"]))["sub_msg"]
-	log.Printf("%s msg:%s 订单关闭相应参数  %+v", tradeno, msg, m)
-	if msg == "交易状态不合法" || msg == "REASON_ILLEGAL_STATUS" { //已支付
+	valus := *qutil.ObjToMap((*resMap)["alipay_trade_close_response"])
+	log.Printf("%s 订单关闭相应参数  %+v", tradeno, valus)
+	if valus["msg"] == "Success" {
+		return true
+	} else if valus["sub_code"] == "ACQ.TRADE_NOT_EXIST" { //用户未扫码(调用撤销订单)
+		return true
+		//return Alipay.cancelOrder(tradeno)
+	}
+	/*else if valus["sub_code"] == "ACQ.INVALID_PARAMETER" || valus["sub_code"] == "ACQ.TRADE_STATUS_ERROR" || valus["sub_code"] == "ACQ.SYSTEM_ERROR" { //参数异常  交易状态不合法  系统异常
 		return false
+	}*/
+	return false
+}
+
+//撤销订单
+func (a *aliPayStruct) cancelOrder(tradeno string) bool {
+	cancel := struct {
+		OutTradeNo string `json:"out_trade_no"`
+	}{
+		OutTradeNo: tradeno,
 	}
+	bizbyte, _ := json.Marshal(cancel)
+	resMap, err := Alipay.DoRequest(string(bizbyte), tradeno, Method_Tpye_Cancel)
+	log.Println(resMap, err)
 	return true
 }

+ 27 - 7
src/jfw/modules/subscribepay/src/pay/util.go

@@ -9,21 +9,41 @@ import (
 	"encoding/base64"
 	"encoding/pem"
 	"errors"
+	"fmt"
 	"hash"
+	"log"
+	qutil "qfw/util"
 	"strings"
 	"time"
-	qutil "qfw/util"
-	"fmt"
 )
 
-
-
-
 //创建订单号
 func GetOrderCode(id string) string {
 	return fmt.Sprintf("%s%s", time.Now().Format("150405"), qutil.GetRandom(6))
 }
 
+//关闭订单
+func CloseDataExportOrder(payWay, tradeno, prepayTime string) (status bool) {
+	//如果订单超时 则不用关闭订单
+	t, err := time.ParseInLocation(qutil.Date_Full_Layout, prepayTime, time.Local)
+	if err == nil {
+		if t.Add(time.Hour * 2).Before(time.Now()) {
+			return true
+		}
+	}
+	log.Printf("%s取消订单,订单号%s\n", payWay, tradeno)
+
+	if strings.HasPrefix(payWay, "ali_") {
+		status = Alipay.CloseOrder(tradeno)
+	} else if strings.HasPrefix(payWay, "wx_") {
+		status = WxStruct.CloseOrder(tradeno, payWay)
+	}
+	if !status {
+		log.Printf("%s订单关闭失败:%s\n", payWay, tradeno)
+	}
+	return status
+}
+
 //加载秘钥
 func parsePrivateKey(key string) (*rsa.PrivateKey, error) {
 	block, _ := pem.Decode([]byte(key))
@@ -57,7 +77,7 @@ func parseAliPayPublicKey(key string) (*rsa.PublicKey, error) {
 }
 
 //生成加密token
-func (a *AliPayStruct) getSign(data []byte) (signature string, err error) {
+func (a *aliPayStruct) getSign(data []byte) (signature string, err error) {
 	var h hash.Hash
 	var hType crypto.Hash
 	h = sha256.New()
@@ -72,4 +92,4 @@ func (a *AliPayStruct) getSign(data []byte) (signature string, err error) {
 	}
 	signature = base64.StdEncoding.EncodeToString(bs)
 	return
-}
+}

+ 5 - 4
src/jfw/modules/subscribepay/src/pay/wxPay.go

@@ -77,12 +77,12 @@ func (w *WeixinStruct) CreatePrepayOrder(tradeno, ip, openid, detailmsg string,
 	}
 	//支付类型分类
 
-	tradeType,appid := "",w.Appid
+	tradeType, appid := "", w.Appid
 	if tradeno == WX_REWARD_JSAPI || tradeno == WX_DATAEXPORT_JSAPI || tradeno == WX_DATAREPORT_JSAPI || tradeno == WX_SUBVIP_JSAPI { //微信js支付
 		tradeType = "JSAPI"
 	} else if tradeno == WX_DATAEXPORT_APP || tradeno == WX_DATAREPORT_APP || tradeno == WX_SUBVIP_APP { //app支付
 		tradeType = "APP"
-		appid=w.Appid_app
+		appid = w.Appid_app
 	} else if tradeno == WX_DATAEXPORT_NATIVE { //扫码支付
 		tradeType = "NATIVE"
 	}
@@ -135,9 +135,9 @@ func (w *WeixinStruct) GetPrepayId(weixinrpc string, param map[string]string) (r
 }
 
 //微信支付订单关闭
-func (w *WeixinStruct) CloseOrder(weixinrpc, tradeno string) (r bool) {
+func (w *WeixinStruct) CloseOrder(tradeno, payWay string) (r bool) {
 	util.Try(func() {
-		client, err := rpc.DialHTTP("tcp", weixinrpc)
+		client, err := rpc.DialHTTP("tcp", config.Config.Weixinrpc)
 		defer client.Close()
 		if err != nil {
 			return
@@ -202,6 +202,7 @@ func (wx *WeixinStruct) GetAppWxPayStr(prepayid string) string {
 	}
 	return string(byteArr)
 }
+
 //获取js支付参数(为方便存库返回string,前端需要转成json)
 func GetWxJsPayStr(prepayid string) string {
 	//获取订单支付字符串

+ 31 - 1
src/jfw/modules/subscribepay/src/service/commonAction.go

@@ -4,6 +4,7 @@ import (
 	"config"
 	"entity"
 	"github.com/go-xweb/xweb"
+	"pay"
 	qutil "qfw/util"
 	"time"
 	"util"
@@ -12,9 +13,11 @@ import (
 //付费公用方法
 type CommonAction struct {
 	*xweb.Action
-	applyInvoice xweb.Mapper `xweb:"/applyInvoice"`          //申请发票
 	isPaySuccess xweb.Mapper `xweb:"/isPaySuccess"`          //数据导出是否支付成功
 	paySuccess   xweb.Mapper `xweb:"/dataReport/paySuccess"` //数据报告支付完成
+	deleteOrder xweb.Mapper `xweb:"/deleteOrder"` //删除订单
+
+	applyInvoice xweb.Mapper `xweb:"/applyInvoice"`          //申请发票
 }
 
 //----------------------------申请发票------------------------------------
@@ -60,6 +63,33 @@ func (d *CommonAction) ApplyInvoice() error {
 	return nil
 }
 
+/**
+
+根据 id+openid 删除
+*/
+func (d *CommonAction) DeleteOrder() error {
+	if userId := d.GetSession("userId"); userId != nil {
+		queryMap := map[string]interface{}{
+			"id":      d.GetString("id"),
+			"user_id": userId.(string),
+		}
+		flag := false
+		order := util.Mysql.FindOne(tableName_order, queryMap, "pay_way,out_trade_no,prepay_time,order_status", "")
+		if order != nil {
+			if qutil.IntAll((*order)["order_status"]) == 0 { //未支付状态下 删除订单需要先关闭订单
+				flag = pay.CloseDataExportOrder(qutil.ObjToString((*order)["pay_way"]), qutil.ObjToString((*order)["out_trade_no"]), qutil.ObjToString((*order)["prepay_time"]))
+			} else {
+				flag = true
+			}
+		}
+		if flag {
+			flag = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -1})
+		}
+		d.ServeJson(map[string]interface{}{"success": flag})
+	}
+	return nil
+}
+
 //数据导出-是否支付完成
 func (p *CommonAction) IsPaySuccess() {
 	defer qutil.Catch()

+ 5 - 3
src/jfw/modules/subscribepay/src/service/dataExportPay_mobile.go

@@ -337,7 +337,7 @@ func (p *DataExportPayMobile) WxSacnPay_CreateOrder() {
 			}
 		} else {
 			//在此关闭之前的订单
-			if !CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
+			if !pay.CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
 				p.ServeJson(map[string]interface{}{
 					"status": "n",
 				})
@@ -562,12 +562,12 @@ func (w *DataExportPayMobile) GetPayParm() error {
 	surplus_second := prepayTime.Unix() + 7200 - time.Now().Unix()
 	if (err == nil && surplus_second <= 0) || prepayId == "" || pay_way != "wx_js" {
 		//在此关闭之前的订单
-		/*if !pay.CloseDataExportOrder(util.ObjToString((*Order)["pay_way"]), util.ObjToString((*Order)["out_trade_no"]), util.ObjToString((*Order)["prepay_time"])) {
+		if !pay.CloseDataExportOrder(qutil.ObjToString((*Order)["pay_way"]), qutil.ObjToString((*Order)["out_trade_no"]), qutil.ObjToString((*Order)["prepay_time"])) {
 			w.ServeJson(map[string]interface{}{
 				"status": "n",
 			})
 			return nil
-		}*/
+		}
 		log.Println("订单过期或支付pc端订单,重新生成预订单!", userid)
 		tradeno, ret := pay.WxStruct.CreatePrepayOrder("c", w.IP(), openid, "", orderMoney)
 		if ret != nil {
@@ -583,6 +583,7 @@ func (w *DataExportPayMobile) GetPayParm() error {
 				prepayId = (*ret)["prepayid"]
 			}
 		}
+		realToken = entity.GetWaitPayToken(orderid, orderMoney, order_code, pay_way, userid) //刷新token
 	}
 	timestamp := time.Now().Unix()
 	nonceStr := qutil.GetRandom(16) + qutil.GetLetterRandom(16)
@@ -597,6 +598,7 @@ func (w *DataExportPayMobile) GetPayParm() error {
 		"prepayId":   "prepay_id=" + prepayId,
 		"order_code": order_code,
 		"user_mail":  user_mail,
+		"token":      realToken,
 	})
 	return nil
 }

+ 3 - 27
src/jfw/modules/subscribepay/src/service/dataExportPay_pc.go

@@ -2,7 +2,6 @@ package service
 
 import (
 	"bytes"
-	"config"
 	"encoding/base64"
 	"encoding/json"
 	"entity"
@@ -180,7 +179,7 @@ func (p *DataExportPayPC) SacnPay_CreateOrder() {
 		//价格支付方式变动需要重新生成订单二维码(关闭之前的订单)
 		if (data_spec != "" && data_spec != qutil.ObjToString((*oldOrder)["data_spec"])) || pay_way != qutil.ObjToString((*oldOrder)["pay_way"]) {
 			//在此关闭之前的订单
-			if !CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
+			if !pay.CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
 				p.ServeJson(map[string]interface{}{
 					"status": "n",
 				})
@@ -392,7 +391,7 @@ func (p *DataExportPayPC) GetOrderPayMsg() {
 			return "", "订单状态异常", false
 		}
 		//在此关闭没有超时之前的订单 在pc端支付微信端订单,pay_way是wx_js 先进行关闭,再重新创建订单的时候,pay_way需要修改成wx_pc。
-		if !CloseDataExportOrder(qutil.ObjToString((*queryOrder)["pay_way"]), qutil.ObjToString((*queryOrder)["out_trade_no"]), qutil.ObjToString((*queryOrder)["prepay_time"])) {
+		if !pay.CloseDataExportOrder(qutil.ObjToString((*queryOrder)["pay_way"]), qutil.ObjToString((*queryOrder)["out_trade_no"]), qutil.ObjToString((*queryOrder)["prepay_time"])) {
 			return "", "订单关闭异常", false
 		}
 		//修改支付方式
@@ -457,27 +456,4 @@ func (p *DataExportPayPC) GetOrderPayMsg() {
 	})
 
 }
-func CloseDataExportOrder(payWay, tradeno, prepayTime string) (status bool) {
-	//如果订单超时 则不用关闭订单
-	local, _ := time.LoadLocation("Local")
-	t, err := time.ParseInLocation(qutil.Date_Full_Layout, prepayTime, local)
-	//t, err := time.Parse(util.Date_Full_Layout, prepayTime)
-	if err == nil {
-		if t.Add(time.Hour * 2).Before(time.Now()) {
-			return true
-		}
-	}
-	log.Printf("%s取消订单,订单号%s\n", payWay, tradeno)
-	if payWay == "ali_pc" {
-		status = pay.Alipay.CloseOrder(tradeno)
-	} else if payWay == "wx_pc" || payWay == "wx_js" {
-		status = pay.WxStruct.CloseOrder(config.Config.Weixinrpc, tradeno)
-	} else {
-		//非扫码支付 暂不处理
-		status = true
-	}
-	if !status {
-		log.Printf("%s订单关闭失败:%s\n", payWay, tradeno)
-	}
-	return status
-}
+

+ 14 - 67
src/jfw/modules/subscribepay/src/service/orderListDetails.go

@@ -25,7 +25,6 @@ type OrderListDetails struct {
 	myOrder             xweb.Mapper `xweb:"/orderListDetails/myOrder"`             //查询订单首页
 	myOrderPaging       xweb.Mapper `xweb:"/orderListDetails/myOrderPaging"`       //查询订单分页
 	deleteOrder         xweb.Mapper `xweb:"/orderListDetails/deleteOrder"`         //删除订单
-	applyInvoice        xweb.Mapper `xweb:"/orderListDetails/applyInvoice"`        //开发票
 	payCancel           xweb.Mapper `xweb:"/orderListDetails/payCancel"`           //支付成功后,其余订单改为已取消
 	setEmail            xweb.Mapper `xweb:"/orderListDetails/setEmail"`            //设置邮箱
 	checkMailCodeVerify xweb.Mapper `xweb:"/orderListDetails/checkMailCodeVerify"` //验证码
@@ -56,24 +55,23 @@ func (this *OrderListDetails) GetOrderPayAllMsg() {
 			"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,applybill_type,applybill_taxnum,applybill_company", "")
+		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,applybill_type,applybill_taxnum,applybill_company,vip_starttime,vip_endtime", "")
 		log.Println("odata:", oData)
 		//查询订单信息
 		if oData == nil || len(*oData) == 0 {
 			return &entity.FuncResult{false, errors.New("未找到此订单"), nil}
 		}
-		//已支付订单查询有效时间   -已取消的也查看有效时间 用于判断再次购买
-		uData, ok := util.MQFW.FindById("user", userId, `{"l_vip_starttime":1,"l_vip_endtime":1}`)
-		if uData == nil || len(*uData) == 0 || !ok {
+
+		uData := util.Mysql.FindOne(tableName_order, query, "vip_starttime,vip_endtime", "")
+		if uData == nil || len(*uData) == 0 {
 			return &entity.FuncResult{false, errors.New("数据库查询异常"), nil}
 		}
-		//TODO 字段添加完 可以去掉注释
-		//		uData := util.Mysql.FindOne(tableName_order, query, "vip_starttime,vip_endtime", "")
-		//		if uData == nil || len(*uData) == 0 {
+		//		//判断用户状态
+		//		uStatus, ok := util.MQFW.FindById("user", userId, `{"i_vip_status":1}`)
+		//		if uStatus == nil || len(*uStatus) == 0 || !ok {
 		//			return &entity.FuncResult{false, errors.New("数据库查询异常"), nil}
 		//		}
-		//
-		log.Println("udata:", uData)
+		//		log.Println("udata:", uData)
 		if qutil.IntAll((*oData)["order_status"]) != 1 {
 			return &entity.FuncResult{true, nil, map[string]interface{}{
 				"order": oData,
@@ -124,6 +122,7 @@ func (o *OrderListDetails) MyOrder() error {
 	if res != nil {
 		o.SetRes(res, queryM)
 	}
+	log.Println("res:", res)
 	o.ServeJson(map[string]interface{}{
 		"res":         res,
 		"pageSize":    order_pageSize,
@@ -223,49 +222,6 @@ func (o *OrderListDetails) DeleteOrder() error {
 	return nil
 }
 
-//开发票
-func (o *OrderListDetails) ApplyInvoice() error {
-	var applyBill_status int
-	var order_code, applyBill_company, applyBill_taxnum, applyBill_type string
-	var updateBl bool = false
-	order_code = o.GetString("order_code")
-	//获取数据
-	applyBill_type = o.GetString("demo-radio") //个人 单位
-	queryMap := map[string]interface{}{
-		"order_code": order_code,
-	}
-	if applyBill_type == "个人" {
-		applyBill_status = 1
-		updateBl = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"applyBill_status": applyBill_status})
-
-	} else if applyBill_type == "单位" {
-		applyBill_status = 1                                 //状态
-		applyBill_company = o.GetString("applyBill_company") //公司名
-		applyBill_taxnum = o.GetString("applyBill_taxnum")   //纳税人识别号
-		updateBl = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{
-			"applyBill_company": applyBill_company,
-			"applyBill_taxnum":  applyBill_taxnum,
-			"applyBill_status":  applyBill_status,
-			"applyBill_type":    1,
-		}) //修改操作
-	}
-	//判断条件
-	if updateBl {
-		go func() {
-			orderdata := util.Mysql.FindOne(tableName_order, map[string]interface{}{
-				"order_code": order_code,
-			}, "id,filter,user_mail,user_phone,product_type,data_spec,filter_id,order_code,data_count,order_status,order_money,out_trade_no,applybill_type,applybill_company,applybill_taxnum,user_openid,create_time,pay_time,pay_way", "")
-			tt := time.Now()
-			pay_time := qutil.FormatDate(&tt, qutil.Date_Full_Layout)
-			entity.SendMailToBJFinance(orderdata, pay_time, "", 2, config.GmailAuth)
-		}()
-	}
-	o.ServeJson(map[string]interface{}{
-		"flag": updateBl,
-	})
-	return nil
-}
-
 //设置邮箱-发送验证码
 func (o *OrderListDetails) SetEmail() {
 	log.Println("--")
@@ -423,28 +379,19 @@ func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[strin
 		if lastbuy_code == v["order_code"] {
 			v["lastbuy_code"] = lastbuy_code
 		}
-		//订阅周期时间 TODO 错的   查msyql
-		if v["pay_time"] != nil && v["product_type"] == "vip订阅" {
-			//TODO 还没录入数据
-			data, err := util.MQFW.FindOne("user", bson.M{"_id": queryM["user_id"]})
+		//
+		if v["pay_time"] != nil && ((v["product_type"] == "vip订阅") || (v["product_type"] == "VIP订阅")) {
+			data, err := util.MQFW.FindOne("user", bson.M{"_id": bson.ObjectIdHex(qutil.ObjToString(o.GetSession("userId")))})
 			if len(*data) > 0 && err {
-				v["i_vip_status"] = qutil.ObjToString((*data)["i_vip_status"])
-				v["l_vip_starttime"] = qutil.ObjToString((*data)["l_vip_starttime"])
-				v["l_vip_endtime"] = qutil.ObjToString((*data)["l_vip_endtime"])
-			} else {
-				/* 0:暂不使用vip订阅 1:试用 2:正式 -1:试用到期 -2:正式到期 */
-				v["i_vip_status"] = "1"
-				v["l_vip_starttime"] = "1571991460"
-				v["l_vip_endtime"] = "1572596260"
+				v["i_vip_status"] = qutil.Int64All((*data)["i_vip_status"])
 			}
 		}
 	}
-	log.Println(res)
 }
 
 //查询数据
 func (o *OrderListDetails) Datas(queryM map[string]interface{}, pageNum int) (haveNextPage bool, result []map[string]interface{}, err error) {
-	res := *util.Mysql.Find(tableName_order, queryM, "id,order_code,filter_publishtime,create_time,data_spec,filter_id,filter_keys,order_money,data_count,order_status,pay_way,product_type,filter,pay_time", "create_time desc", -1, 0)
+	res := *util.Mysql.Find(tableName_order, queryM, "id,order_code,filter_publishtime,create_time,data_spec,filter_id,filter_keys,order_money,data_count,order_status,pay_way,product_type,filter,pay_time,vip_starttime,vip_endtime", "create_time desc", -1, 0)
 	if len(res) > 0 {
 		start := (pageNum - 1) * pagesize_max
 		end := pageNum * pagesize_max

+ 3 - 1
src/jfw/modules/subscribepay/src/service/payCallback.go

@@ -100,7 +100,9 @@ func (p *PayCallBackAction) WxPayCallback() {
 				log.Printf("微信数据报告更新执行出错 %+v\n", thisParam)
 			}
 		} else if strings.HasPrefix(thisParam.OutTradeno, pay.WX_SUBVIP_APP) || strings.HasPrefix(thisParam.OutTradeno, pay.WX_SUBVIP_JSAPI) { //vip订阅
-
+			if update=entity.JyVipSubStruct.PayCallBack(thisParam);!update{
+				log.Printf("微信vip订阅更新执行出错 %+v\n", thisParam)
+			}
 		}
 		if insert = thisParam.SaveWxPayRecord(); !insert {
 			log.Printf("微信支付保存支付记录出错 %+v\n", thisParam)

+ 4 - 4
src/jfw/modules/subscribepay/src/service/vipSubscribeEdit.go

@@ -50,12 +50,12 @@ func (this *EditSub) GetSubBuyMsg() {
 		}
 		o_vipjy := qutil.ObjToMap((*mData)["o_vipjy"])
 		//地区 城市 数量 修改次数
-		editNum := qutil.IntAll(redis.Get("other", userId+"_SubEdit_"+time.Now().Month().String()))
+		//editNum := qutil.IntAll(redis.Get("other", userId+"_SubEdit_"+time.Now().Month().String()))
 		return &editSubResult{true, nil, map[string]interface{}{
 			"area":     (*o_vipjy)["o_area"],
 			"industry": (*o_vipjy)["a_buyerclass"],
 			"buyset":   (*o_vipjy)["a_buyset"],
-			"editNum":  editNum,
+			//"editNum":  editNum,
 		}}
 	}()
 	if r.Err != nil {
@@ -75,7 +75,7 @@ func (this *EditSub) SaveSubEdit() {
 			return &editSubResult{false, errors.New("修改次数已达上限"), nil}
 		}
 		//获取购买数量
-		buyset := entity.GetBuySet(userId)
+		buyset := entity.JyVipSubStruct.GetBuySet(userId)
 		switch doType {
 		case "area":
 			areaNew := map[string]interface{}{}
@@ -85,7 +85,7 @@ func (this *EditSub) SaveSubEdit() {
 			if err != nil {
 				return &editSubResult{false, errors.New("数据格式错误"), nil}
 			}
-			count := entity.GetBuyAreaCount(areaNew)
+			count := entity.JyVipSubStruct.GetBuyAreaCount(&areaNew)
 			if (count[0] > buyset[0] || count[1] > buyset[1]) && buyset[0] != -1 {
 				return &editSubResult{false, errors.New("非法操作"), nil}
 			}

+ 47 - 34
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -20,15 +20,14 @@ import (
 //vip订阅付费
 type SubVipPayOrder struct {
 	*xweb.Action
-	createOrder xweb.Mapper `xweb:"/jypay/vipsubscribe/createOrder"` //创建订单并支付
-	orderToPay  xweb.Mapper `xweb:"/jypay/vipsubscribe/orderToPay"`  //支付已创建订单
+	createOrder xweb.Mapper `xweb:"/vipsubscribe/createOrder"` //创建订单并支付
+	orderToPay  xweb.Mapper `xweb:"/vipsubscribe/orderToPay"`  //支付已创建订单
 }
 
 func init() {
 	xweb.AddAction(&SubVipPayOrder{})
 }
 
-
 //创建订单返回支付串
 func (this *SubVipPayOrder) CreateOrder() {
 	area := qutil.ObjToMap(this.GetString("area"))
@@ -43,6 +42,9 @@ func (this *SubVipPayOrder) CreateOrder() {
 		if len(industry) == 1 { //去掉[""]
 			industry = []string{}
 		}
+		if !(payWay == "wx_js" || payWay == "wx_app" || payWay == "ali_app") {
+			return &entity.FuncResult{false, errors.New("未知支付"), nil}
+		}
 		date_count, date_unit, err := checkReqDate(date)
 		if err != nil {
 			return &entity.FuncResult{false, err, nil}
@@ -62,39 +64,56 @@ func (this *SubVipPayOrder) CreateOrder() {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
 		//计算价格
-		totalfee := entity.GetSubVipPrice(area, industry, date_count, date_unit)
+		//totalfee := entity.GetSubVipPrice(area, industry, date_count, date_unit)
+		totalfee := 1
 		//创建订单
-		tradeno, ret := pay.WxStruct.CreatePrepayOrder( "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"]
+		tradeno, prepayid, payStr := "", "", ""
+
+		if payWay == "wx_js" { //微信js支付
+			var ret *map[string]string
+			tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_JSAPI, 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 &entity.FuncResult{false, errors.New(errMsg), nil}
 			}
-			return &entity.FuncResult{false, errors.New(errMsg), nil}
+			prepayid = qutil.ObjToString((*ret)["prepayid"])
+			payStr = pay.GetWxJsPayStr(prepayid)
+		} else if payWay == "wx_app" {
+			var ret *map[string]string
+			tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_JSAPI, 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 &entity.FuncResult{false, errors.New(errMsg), nil}
+			}
+			prepayid = qutil.ObjToString((*ret)["prepayid"])
+			payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
 		}
-		//存入订单表
-		ordercode := pay.GetOrderCode(openId)
-		prepayid := qutil.ObjToString((*ret)["prepayid"])
-		jsPayParam := pay.GetWxJsPayStr(prepayid)
-
-		filter := map[string]interface{}{
-			"_id":        mog_id,
-			"area":       area,
-			"industry":   industry,
-			"cyclecount": date_count, //时长
-			"cycleunit":  date_unit,  //单位
+		filter := entity.VipSimpleMsg{
+			mog_id,
+			area,
+			industry,
+			date_count,
+			date_unit,
 		}
 		filterStr, _ := json.Marshal(filter)
-
+		ordercode := pay.GetOrderCode(userId)
 		orderid := util.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,
+			"code_url":       payStr,
 			"out_trade_no":   tradeno,
 			"order_code":     ordercode,
 			"product_type":   "VIP订阅",
@@ -109,10 +128,7 @@ func (this *SubVipPayOrder) CreateOrder() {
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
 		}
-		return &entity.FuncResult{true, nil, map[string]interface{}{
-			"code": ordercode,
-			"res":  jsPayParam,
-		}}
+		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode, "res": payStr}}
 	}()
 	if r.Err != nil {
 		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
@@ -140,9 +156,7 @@ func (this *SubVipPayOrder) OrderToPay() {
 		jsPayParam := qutil.ObjToString((*oData)["code_url"])
 		if time.Now().Before(prepayTime.Add(time.Hour*2)) && jsPayParam != "" {
 			//未过期
-			return &entity.FuncResult{true, nil, map[string]interface{}{
-				"res": jsPayParam,
-			}}
+			return &entity.FuncResult{true, nil, map[string]interface{}{"res": jsPayParam}}
 		}
 		//重新生成订单
 		openId := qutil.ObjToString((*oData)["user_openid"])
@@ -170,7 +184,7 @@ func (this *SubVipPayOrder) OrderToPay() {
 		if !ok {
 			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
 		}
-		return &entity.FuncResult{true, nil, map[string]interface{}{"res": jsPayParam	}}
+		return &entity.FuncResult{true, nil, map[string]interface{}{"res": jsPayParam}}
 	}()
 	if r.Err != nil {
 		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
@@ -200,4 +214,3 @@ func checkReqDate(dateStr string) (cyclecount, cycleunit int, err error) {
 	}
 	return -1, -1, errors.New(fmt.Sprintf("日期%s格式化出错", dateStr))
 }
-

+ 5 - 3
src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go

@@ -232,7 +232,7 @@ func (this *TrialOrder) TrialPay() {
 		if mog_id == "" {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
-		if !entity.CanTrial(userId) {
+		if !entity.JyVipSubStruct.CanTrial(userId) {
 			return &entity.FuncResult{false, errors.New("无试用权限"), nil}
 		}
 		//计算价格
@@ -247,7 +247,7 @@ func (this *TrialOrder) TrialPay() {
 			"cycleunit":  date_unit,  //单位
 		}
 		filterStr, _ := json.Marshal(filter)
-
+		endTime := now.AddDate(0, 0, 7)
 		orderid := util.Mysql.Insert("dataexport_order", map[string]interface{}{
 			"order_money":    totalfee,
 			"order_status":   1,
@@ -264,11 +264,13 @@ func (this *TrialOrder) TrialPay() {
 			"user_id":        userId,
 			"filter":         string(filterStr), //筛选
 			"pay_time":       qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"vip_starttime":  qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"vip_endtime":    qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
 		})
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据保存异常"), nil}
 		}
-		if !entity.StartTrial(userId, area, industry) { //设置开始试用
+		if !entity.JyVipSubStruct.StartSubVip(userId, area, industry, now, endTime,true) { //设置开始试用
 			return &entity.FuncResult{false, errors.New("开通试用异常"), nil}
 		}
 		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode}}

+ 1 - 0
src/web/staticres/vipsubscribe/css/choose_area.css

@@ -111,6 +111,7 @@
   line-height: .94rem;
   color: #fff;
   font-size: .34rem;
+  background-color: #fff;
 }
 
 .tips_btn .btns .save-btn,

+ 1 - 0
src/web/staticres/vipsubscribe/css/choose_industry.css

@@ -111,6 +111,7 @@
   line-height: .94rem;
   color: #fff;
   font-size: .34rem;
+  background-color: #fff;
 }
 
 .tips_btn .btns .save-btn,

+ 2 - 0
src/web/staticres/vipsubscribe/css/vip_order_detail.css

@@ -479,6 +479,8 @@
   line-height: .94rem;
   text-align: center;
   font-size: .36rem;
+  position: absolute;
+  bottom: 0px;
 }
 
 .vip_order_detail .align {

+ 8 - 4
src/web/templates/pc/myOrder.html

@@ -316,6 +316,10 @@
 							$(".backTop").click();
 							for (var i = 0; i < data.list.length; i++) {
 								var obj = data.list[i];
+								//vip订单不显示 2.8.5
+								if (obj.data_count==null){
+									continue;
+								}
 								var id = obj.id;
 								var orderCode = obj.order_code;
 								var publishTime = obj.filter_publishtime;
@@ -468,7 +472,7 @@
 							action: function() {
 								$.ajax({
 									type: "post",
-									url: "/front/dataExport/deleteOrder",
+									url: "/jypay/deleteOrder",
 									data: {
 										"id": id
 									},
@@ -626,7 +630,7 @@
 					flushpay=true;
 				}
 				if (flushpay) { //二维码超时或者支付微信订单
-					$.post("/dataexport/getOrderPayMsg", {
+					$.post("/jypay/dataexport/getOrderPayMsg", {
 						payway: payway,
 						orderCode: orderCode,
 						prepaytime: prepaytime
@@ -659,7 +663,7 @@
 					alertS("此订单不支持微信支付!");
 					return
 				}
-				$.post("/dataexport/getOrderPayMsg", {
+				$.post("/jypay/dataexport/getOrderPayMsg", {
 					payway: payway,
 					orderCode: orderCode,
 					prepaytime: prepaytime
@@ -714,7 +718,7 @@
 					interval_t--;
 					//查询支付知否完成
 					if (interval_t % 3 == 0) {
-						$.post("/dataExport/pay/isPaySuccess", {
+						$.post("/jypay/isPaySuccess", {
 							code: orderCode
 						}, function(r) {
 							if (r.status == "y") {

+ 1 - 1
src/web/templates/weixin/dataExport/dataExport_applyInvoice.html

@@ -327,7 +327,7 @@
 					}
 				}
 				if (submitBl){
-					$.post('/subscribepay/orderListDetails/applyInvoice',formParam+"&demo-radio="+$(".type").html(),function(data){ 
+					$.post('/jypay/applyInvoice',formParam+"&demo-radio="+$(".type").html(),function(data){ 
 										if(data.flag){
 											//window.location.href="/front/wxMyorder/wxPaySuccess/" + {{.T.order_code}}
 											sessionStorage.applysuccess="1";

+ 22 - 317
src/web/templates/weixin/dataExport/dataExport_toMyOrder.html

@@ -293,6 +293,8 @@
 					gopayIndex = $(e).parent().parent().index();
 					if(res.status == 1){
 						onBridgeReady(res,e);
+            //更新token
+            $(e).attr("token",res.token);
 					}
 				});
 			}
@@ -458,12 +460,9 @@
 			                                    var self = $(obj).parent().parent();
 			                                    var parent = self.parent();
 			                                	deleteIndex=self.index();
-			                                	//删除索引存入缓存
-			                                	//sessionStorage.setItem("deleteIndex",deleteIndex);
 			                                	dataCache.splice(deleteIndex,1)
 			                                	if(data.res!=null){
 			                                		dataCache.push(data.res[0])
-			                                	//	hasNextPage=data.hasNextPage;
 			                                		hasNextPage=data.nextPage;
 			                                	}
 			                                    self.remove();
@@ -474,9 +473,9 @@
 			                                            ok: {
 			                                                text: '确定',
 			                                                btnClass: 'btn-primary-2',
-			                                                action: function() {
-			                                                    		console.log(data)
-			                                                    		console.log(data.res.product_type);
+		                                                action: function() {
+	                                                    		console.log(data)
+	                                                    		console.log(data.res.product_type);
 			                                                    if(parent.children("div").length==0){
 			                                                    	nodataHtml=""
 																	nodataHtml+='<div style="text-align:center;">';
@@ -485,302 +484,7 @@
 			                                                        $(".card_lists").append(nodataHtml);
 			                                                       	$(".dropload-down").hide();
 			                                                    }else{//删除一条数据 往后铺一条数据
-			                                                    	if(data.res[0].product_type=="历史数据"){
-			                                                    		console.log("历史数据")
-			                                                    		var listhtml=""
-				                                                    	var oneD=data.res;
-																		for(var index in oneD){
-																	    var obj=oneD[index];
-																    	count++;
-																		var id = obj.id;
-																		//订单编号
-												                        var orderCode = obj.order_code;
-												                        //创建时间
-												                        var createTime=obj.create_time;
-												                        createTime=createTime.replace(/-/g,".")
-												                        //选择时间
-												                        var publishTime = obj.filter_publishtime;
-												                        if(!publishTime){
-												                            publishTime = "全部";
-												                        }else{
-																			if(publishTime.length==11){
-												                        	 	if(publishTime.slice(0,1)!="_"){
-												                        	 		var publishtime_=publishTime.slice(0,10);
-												                        	 		publishTime=timestampToTime(publishtime_);
-												                        	 		publishTime=publishTime+"-";
-												                        	 	}else{
-												                        	 		var publishtime_=publishTime.slice(1,11);
-												                        	 		publishTime=timestampToTime(publishtime_);
-												                        	 		publishTime=publishTime+"前全部";
-												                        	 	}
-												                        	 }
-																		}
-												                        //1标准字段包 2高级字段包
-												                        var spec = obj.data_spec;
-												                        if(spec==1){
-												                        	spec ="标准字段包";
-												                        }else if(spec ==2){
-												                        	spec="高级字段包";
-												                        }
-												                        //订单状态 0待支付 1已完成 -1删除
-												                        var orderStatus = obj.order_status;
-												                        if(orderStatus==0){
-												                        	orderStatus="待付款"
-												                        	orderHtml=""
-												                        	orderHtml+='<span class="status notpay">'+orderStatus+'</span>'
-												                        	orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id +",this)\"></a>";
-												                        	iconHtml=""
-												                        	iconHtml+='<div class="card-footer">'
-																						+'<a  class="btn cancle" onclick="deleteOrder('+id+',this)">取消订单</a>'
-																						+'<a href="pay_order.html" class="btn pay">去支付</a>'
-																					+'</div>'
-												                        }else if(orderStatus==1){
-												                        	orderStatus="已完成";
-												                        	orderHtml=""
-												                        	orderHtml+='<span class="status">'+orderStatus+'</span>'
-												                        	orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id +",this)\"></a>";
-												                        	iconHtml=""
-												                        	iconHtml+='<div class="card-footer">'
-																						+'<a onclick="onceMore(this)" class="btn cancle">再次购买</a>'
-																					+'</div>'
-												                        }
-												                        //订单总数
-												                        var data_count=obj.data_count;
-												                        //订单金额
-												                        var orderMoney = obj.order_money;
-					                        	                        //金额格式化 小数点前 1,000
-												                        orderMoney=orderMoney+"";
-											           	             	orderMoney_1=toThousands(orderMoney.split(".")[0]);
-																		orderMoney_2=orderMoney.split(".")[1];
-											           	             	if(orderMoney_2){
-											           	             		orderMoney=orderMoney_1+"."+orderMoney_2;
-											           	             	}else{
-											           	             		orderMoney=orderMoney_1;
-											           	             	}
-												                        //
-												                        var token = obj.token;
-												                        //关键词
-																		if(obj.filter_keys && obj.filter_keys.split(",").length>0){
-																			var keysHtml="";
-													                        var keysArr = obj.filter_keys.split(",");
-													                        var keysLen = keysArr.length;for(var j=0;j<keysLen;j++){
-													                            keysHtml += "<span>" + keysArr[j] + "&nbsp</span>";
-													                        }
-													                 	}else{
-													                 		keysHtml=""
-													                 	}
-																		
-																		listhtml+='<div class="card">'
-																						+'<div class="card-header">'
-																							+'<span class="time" style="color:#888888">'+createTime+'</span>'
-																							+orderHtml
-																						+'</div>'
-																						+'<div class="card-content">'
-																							+'<a  eid='+orderCode+' class="media">'
-																								+'<div class="media-img">'
-																									+'<img src="/dataExport/image/historical_data.png">'
-																								+'</div>'
-																								+'<div class="media-info">'
-																									+'<p class="item-ifo ellipsis">关键词:'+ keysHtml+'</p>'
-																									+'<p class="item-ifo ellipsis">数据量:'+ data_count +'条</p>'
-																									+'<p class="item-ifo ellipsis">数据规格:'+spec+'</p>'
-																									+'<p class="item-ifo ellipsis">筛选日期:'+publishTime+'</p>'
-																								+'</div>'
-																							+'</a>'
-																							+'<div class="price">'
-																								+'<strong class="current">¥'+orderMoney+'</strong>'
-																							+'</div>'
-																						+'</div>'
-																						+iconHtml
-																					+'</div>'
-																		
-																			}
-																		//删除完成后补的订单仍可点击
-																		appendList($(listhtml));
-			                                                    	}else if (data.res[0].product_type=="vip订阅"){
-			                                                    		console.log("vip订阅");
-			                                                    		var listhtml=""
-				                                                    	var oneD=data.res;
-																		for(var index in oneD){
-																		    var obj=oneD[index];
-																	    	count++;
-																			var id = obj.id;
-																			//订单编号
-													                        var orderCode = obj.order_code;
-													                        //创建时间
-													                        var createTime=obj.create_time;
-													                        createTime=createTime.replace(/-/g,".")
-													                        //选择时间
-													                        var publishTime = obj.filter_publishtime;
-													                        if(!publishTime){
-													                            publishTime = "全部";
-													                        }else{
-																				if(publishTime.length==11){
-													                        	 	if(publishTime.slice(0,1)!="_"){
-													                        	 		var publishtime_=publishTime.slice(0,10);
-													                        	 		publishTime=timestampToTime(publishtime_);
-													                        	 		publishTime=publishTime+"-";
-													                        	 	}else{
-													                        	 		var publishtime_=publishTime.slice(1,11);
-													                        	 		publishTime=timestampToTime(publishtime_);
-													                        	 		publishTime=publishTime+"前全部";
-													                        	 	}
-													                        	 }
-																			}
-													                        //筛选条件
-													                        var filter_vip = JSON.parse(obj.filter);
-													                        //地区
-																			var region_vipArr = filter_vip.area;
-													                        var region_vip=""
-													                        var province_length=0;
-													                        var city_length=0;
-													                        for( i in region_vipArr){
-																				if(region_vipArr[i].length==0){
-																					province_length++;
-																				}else{
-																					city_length+=region_vipArr[i].length;
-																				}
-													                        }
-													                        region_vip=province_length+"个省级区域、"+city_length+"个地市";
-													                        //行业
-													                        var industry_vip = filter_vip.industry.length;	//数组
-													                        var cyclecount_vip = filter_vip.cyclecount;	//时长
-													                        var cycleunit_vip = filter_vip.cycleunit;		//单位 1:年 2:月
-													                        //订阅周期
-													                        var effectiveduration_vip=""
-													                        if(cycleunit_vip==1){
-													                        	effectiveduration_vip=cyclecount_vip+"年";
-													                        }else if(cycleunit_vip==2){
-													                        	effectiveduration_vip=cyclecount_vip+"个月"
-													                        }
-													                        var vip_status =obj.i_vip_status;	// 1:试用 2:正式 -1:试用到期 -2:正式到期
-													                        if(obj.i_vip_status=="1"){			//试用
-													                        	effectiveduration_vip="7天";
-													                        }
-													                        //订单状态 0待支付 1已完成 -1删除  
-													                        var orderStatus_vip =  obj.order_status;
-													                        var token_vip = obj.token;
-													                        if(sessionStorage&&sessionStorage.getItem("paySuccess_"+obj.order_code)!=null){
-																				orderStatus = sessionStorage.getItem("paySuccess_"+obj.order_code);
-																				if (orderTabActive==1&&orderStatus==1){
-																					gopayIndex = index;
-																					psss=obj.order_code;
-																					continue;
-																				}else{
-																					sessionStorage.removeItem("paySuccess_"+obj.order_code);
-																				}
-																			}
-													                         //订单金额
-													                        var orderMoney_vip = obj.order_money;
-													                        //金额格式化 小数点前 1,000
-													                        orderMoney_vip=orderMoney_vip+"";
-													       	             	orderMoney_vip1=toThousands(orderMoney_vip.split(".")[0]);
-																			orderMoney_vip2=orderMoney_vip.split(".")[1];
-													       	             	if(orderMoney_vip2){
-													       	             		orderMoney_vip=orderMoney_vip1+"."+orderMoney_vip2;
-													       	             	}else{
-													       	             		orderMoney_vip=orderMoney_vip1;
-													       	             	}
-													                        if(orderStatus_vip==0){
-													                        	orderStatus_vip="待付款"
-													                        	orderHtml=""
-													                        	orderHtml+='<span class="status notpay">'+orderStatus_vip+'</span>'
-													                    		orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id_vip +",this)\"></a>";
-													                        	iconHtml=""
-													                        	iconHtml+='<div class="card-footer">'
-																							+'<a  class="btn cancle" onclick="cancelOrder('+id_vip+',this)">取消订单</a>'
-																							+'<a href="javascript:void(0)" onclick="goPay(this)" class="btn pay" filterid="'+obj.filter_id+'" token="'+token_vip+'" id="'+id_vip+'">去支付</a>'
-																						+'</div>'
-													                        }else if(orderStatus_vip==1){
-													                        	orderStatus_vip="已完成";
-													                        	orderHtml=""
-													                        	orderHtml+='<span class="status">'+orderStatus_vip+'</span>'
-													                    		orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id_vip +",this)\"></a>";
-													                        	iconHtml=""
-													                        	//最后一次购买完 1:试用 2:正式 -1:试用到期 -2:正式到期
-													                        	if((vip_status=="-2")&&(obj.lastbuy_code!="")){
-													                        		iconHtml+='<div class="card-footer">'
-																							+'<a  onclick="renewalOrBuyAgain(2,this)" class="btn cancle">再次购买</a>'
-																						+'</div>'
-													                        	}else if((vip_status=="2")&&(obj.lastbuy_code!="")){
-													                        		iconHtml+='<div class="card-footer">'
-																							+'<a  onclick="renewalOrBuyAgain(1,this)" class="btn cancle">续费</a>'
-																						+'</div>'
-													                        	}
-													                        }else if(orderStatus_vip==-2){
-													                        	orderStatus_vip="已取消";
-													                        	orderHtml="";
-													                        	orderHtml+='<span class="status">'+orderStatus_vip+'</span>'
-													                        	orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id_vip +",this)\"></a>";
-													                        	iconHtml="";
-													                        	iconHtml+='<div class="card-footer">'
-												//											+'<a onclick="renewalOrBuyAgain(2,this)" class="btn cancle">再次购买</a>'
-																						+'</div>'
-													                        }
-													                        //vip状态 0不是vip 1试用 2正式
-													                        var status_vip = obj.i_vip_status;
-													                        if (orderStatus_vip!="已完成"){
-													                        //未支付 或 已取消
-													                        	listhtml+='<div class="card">'
-																							+'<div class="card-header">'
-																								+'<span class="time" style="color:#888888">'+createTime_vip+'</span>'
-																								+orderHtml
-																							+'</div>'
-																							+'<div class="card-content">'
-																								+'<a  eid='+orderCode_vip+' class="media" isvipOrder="true">'
-																									+'<div class="media-img">'
-																										+'<img src="/vipsubscribe/image/vip_order.png">'
-																									+'</div>'
-																									+'<div class="media-info">'
-																										+'<p class="item-ifo ellipsis">区域:'+ region_vip+'</p>'
-																										+'<p class="item-ifo ellipsis">行业:'+ industry_vip +'个行业</p>'
-																										+'<p class="item-ifo ellipsis">订阅周期:'+effectiveduration_vip+'</p>'
-																									+'</div>'
-																								+'</a>'
-																								+'<div class="price">'
-																									+'<strong class="current">¥'+orderMoney_vip+'</strong>'
-																								+'</div>'
-																							+'</div>'
-																							+iconHtml
-																					+'</div>'
-													                        }else{
-															                       //有效时间
-															                       var starttime_vip= obj.l_vip_starttime;
-															                       var endtime_vip= obj.l_vip_endtime;
-															                       starttime_vip = timestampToTime(starttime_vip)
-															                       endtime_vip = timestampToTime(endtime_vip)
-															                       var effectivetime_vip =starttime_vip+"-"+endtime_vip;
-															                        //已完成
-															                        	listhtml+='<div class="card">'
-																									+'<div class="card-header">'
-																										+'<span class="time" style="color:#888888">'+createTime_vip+'</span>'
-																										+orderHtml
-																									+'</div>'
-																									+'<div class="card-content">'
-																										+'<a  eid='+orderCode_vip+' class="media" isvipOrder="true">'
-																											+'<div class="media-img">'
-																												+'<img src="/vipsubscribe/image/vip_order.png">'
-																											+'</div>'
-																											+'<div class="media-info">'
-																												+'<p class="item-ifo ellipsis">区域:'+ region_vip+'</p>'
-																												+'<p class="item-ifo ellipsis">行业:'+ industry_vip +'个行业</p>'
-																												+'<p class="item-ifo ellipsis">订阅周期:'+effectiveduration_vip+'</p>'
-																												+'<p class="item-ifo ellipsis">有效日期:'+effectivetime_vip+'</p>'
-																											+'</div>'
-																										+'</a>'
-																										+'<div class="price">'
-																											+'<strong class="current">¥'+orderMoney_vip+'</strong>'
-																										+'</div>'
-																									+'</div>'
-																									+iconHtml
-																							+'</div>'
-													                        }
-												                        }//for end
-																		//删除完成后补的订单仍可点击
-																		appendList($(listhtml));
-			                                                    	} //vip订阅 end
-			                                                    	
-																		
+			                                                    	structureHtml(data.res);
 			                                                    }//铺数据 end
 			                                                    if(parent.children("div").length<10){
 			                                                		$(".dropload-refresh").text("没有更多了");
@@ -927,12 +631,12 @@
 								$(".card_lists").append(nodataHtml);
 							}
 						})
-					//return 的是 暂无数据的情况noDataHtml 
-					if(!result){
-						$(".dropload-down").hide()
-						return
-					}
 					setTimeout(function(){
+						//return 的是 暂无数据的情况noDataHtml 
+						if(!result){
+							$(".dropload-down").hide()
+							return
+						}
 						if(hasNextPage){
 							wxflag = $(' .main').dropload({
 						        scrollArea : $(".main"),
@@ -967,7 +671,7 @@
 						    });
 							noMoreData(wxflag);
 						}
-					},300)
+					},500)
 				}
 				
 				function structureHtml(object){
@@ -1098,7 +802,7 @@
 											+'</div>'
 											+iconHtml
 									+'</div>'
-						}else if(obj.product_type=="vip订阅"){
+						}else if((obj.product_type=="vip订阅")||(obj.product_type=="VIP订阅")){
 							count++;
 							var id_vip = obj.id;
 							//订单编号
@@ -1117,20 +821,22 @@
 								if(region_vipArr[i].length==0){
 									province_length++;
 								}else{
-									city_length+=region_vipArr[i].length;
+									city_length+=region_vipArr[i].count;
 								}
 	                        }
 	                        region_vip=province_length+"个省级区域、"+city_length+"个地市";
 	                        //行业
-	                        var industry_vip = filter_vip.industry.length;	//数组
+	                        var industry_vip = filter_vip.industry.count;	//数组
 	                        var cyclecount_vip = filter_vip.cyclecount;	//时长
-	                        var cycleunit_vip = filter_vip.cycleunit;		//单位 1:年 2:月
+	                        var cycleunit_vip = filter_vip.cycleunit;		//单位 1:年 2:月 3:天
 	                        //订阅周期
 	                        var effectiveduration_vip=""
 	                        if(cycleunit_vip==1){
 	                        	effectiveduration_vip=cyclecount_vip+"年";
 	                        }else if(cycleunit_vip==2){
 	                        	effectiveduration_vip=cyclecount_vip+"个月"
+	                        }else if(cycleunit_vip==3){
+	                        	effectiveduration_vip=cyclecount_vip+"天";	                    
 	                        }
 	                        var vip_status =obj.i_vip_status;	// 1:试用 2:正式 -1:试用到期 -2:正式到期
 	                        //订单状态 0待支付 1已完成 -1删除  
@@ -1193,7 +899,6 @@
 										+'</div>'
 	                        }
 	                        //vip状态 0不是vip 1试用 2正式
-//	                        var status_vip = obj.i_vip_status;
 	                        if (orderStatus_vip!="已完成"){
 	                        //未支付 或 已取消
 	                        	listhtml+='<div class="card">'
@@ -1220,10 +925,10 @@
 									+'</div>'
 	                        }else{
 			                       //有效时间
-			                       var starttime_vip= obj.l_vip_starttime;
-			                       var endtime_vip= obj.l_vip_endtime;
-			                       starttime_vip = timestampToTime(starttime_vip)
-			                       endtime_vip = timestampToTime(endtime_vip)
+			                       var starttime_vip= obj.vip_starttime+"";
+			                       var endtime_vip= obj.vip_endtime+"";
+			                       starttime_vip= starttime_vip.split(" ")[0].replace(/-/g,".")
+			                       endtime_vip= endtime_vip.split(" ")[0].replace(/-/g,".")
 			                       var effectivetime_vip =starttime_vip+"-"+endtime_vip;
 			                        //已完成
 			                        	listhtml+='<div class="card">'

+ 5 - 1
src/web/templates/weixin/my.html

@@ -92,7 +92,11 @@
 			initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
 			$(function(){
 				$(".vip").on("click",function(){
-		        	window.location.href="/front/vipsubscribe/toPurchasePage";	//vip订阅入口
+					if({{.T.isVip}}==true){
+						window.location.href="/front/vipsubscribe/toSetPage";	    //vip订阅入口  试用或正式vip
+					}else{
+						window.location.href="/front/vipsubscribe/introducePage";	//vip订阅入口  非vip
+					}
 		        })
 		        $(".myorder").on("click",function(){
 		        	window.location.href="/weixin/pay/toMyWxOrder?v=01";

+ 5 - 4
src/web/templates/weixin/vipsubscribe/edit_subscribe.html

@@ -49,9 +49,10 @@
                 <div class="item_bottom"></div>
            </a>
        </div>
+      <!--
        <div class="edit_tips">
            <div class="edit_count">总共可修改次数:<em>3</em> / 3</div>
-       </div>
+       </div>-->
     </div>
     <script src="/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
     <script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
@@ -141,14 +142,14 @@
             }
             
             //可修改次数
-            $(".edit_count em").text(this.reqData.editNum);
+            //$(".edit_count em").text(this.reqData.editNum);
           },
           initClick:function(){
             $(".edit_item").on("click",function(){
-              if(EditSub.reqData.editNum>=3){
+              /*if(EditSub.reqData.editNum>=3){
                 EditSub.showTip("已超过修改次数,不可再做修改");
                 return
-              }
+              }*/
               console.log($(this).attr("data_href"));
               window.location.href=$(this).attr("data_href");
             });

+ 1 - 1
src/web/templates/weixin/vipsubscribe/edit_subscribe_city.html

@@ -30,7 +30,7 @@
             <p>已选择:<span class="result_name">郑州市、洛阳市、淮南市、洛阳市、淮南市、洛阳市、淮南市、洛阳市、淮南市、洛阳市、淮南市</span></p>
         </div>
         <div class="form">
-            <div class="select-area-box" style="padding-bottom: 0;">
+            <div class="select-area-box">
                 <ul class="area-list">
                     <!-- <li>
                         <div class="tab whole">

+ 2 - 2
src/web/templates/weixin/vipsubscribe/vip_introduce.html

@@ -133,8 +133,8 @@
                 </div>
         </div>
         <div class="menu">
-            <a href="/front/vipsubscribe/toPurchasePage/trial" class="try_btn">试用7天</a>
-            <a href="/front/vipsubscribe/toPurchasePage/new" class="subscribe_btn">去订阅</a>
+            <a href="/weixin/pay/vipsubscribe_trial" class="try_btn">试用7天</a>
+            <a href="/weixin/pay/vipsubscribe_new" class="subscribe_btn">去订阅</a>
         </div>
     </div>
 </body>

+ 42 - 24
src/web/templates/weixin/vipsubscribe/vip_order_detail.html

@@ -14,7 +14,7 @@
     <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"}}">
+    <link rel="stylesheet" href="/vipsubscribe/css/vip_order_detail.css?v={{Msg "seo" "version"}}1">
 	{{include "/common/weixin.html"}}
 	<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>   
 </head>
@@ -38,11 +38,11 @@
                         <p class="text ellipsis">订单编号:<span class="orderCode"></span></p>
                         <p class="text ellipsis">下单时间:<span class="prepayTime"></span></p>
                         <!-- 订单状态为已完成时显示支付时间、支付方式和订单号,状态为待付款时不显示 -->
-                        <p class="text ellipsis line_paytime" style="display:none">支付时间:<span class="payTime"></span></p>
+                        <p class="text ellipsis line_paytime" id="paytime" style="display:none">支付时间:<span class="payTime"></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" id="price">价格:¥<span class="price"></span></p>
                         <!----- 未开发票状态 ----->
                         <p class="text ellipsis invoice">发票:<a class="invoicing" style="display:none">开发票</a></p>
                         <!----- 已开发飘状态 ----->
@@ -152,11 +152,16 @@ try{
     $DoPost("/subscribepay/orderListDetails/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.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==0){
+        	$(".productType").text(r.data.order.product_type+"(试用)")
+        }
         //价格
-        if(r.data.order.original_price) $(".price").text(r.data.order.original_price/100);
+        $(".price").text(r.data.order.original_price/100);
         
         //订单条件        
         if(r.data.order.filter){
@@ -166,9 +171,9 @@ try{
               var cityNum=0;
               var provinceNum=0;
               for(var i in filterObj.area) {
-                let citys=filterObj.area[i]
-                if(citys.length>0){
-                  cityNum+=citys.length;
+                let citys=filterObj.area[i];
+                if(citys.count>0){
+                  cityNum+=citys.count;
                 }else{
                   provinceNum++;
                 }
@@ -176,9 +181,7 @@ try{
               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);
@@ -189,7 +192,7 @@ try{
           
           //行业数
           if(filterObj.industry.length!=0){
-            $(".industryNum").text(filterObj.industry.length+"个行业");
+            $(".industryNum").text(filterObj.industry.count+"个行业");
           }else{
             $(".industryNum").text("全行业");
           }
@@ -201,7 +204,10 @@ try{
             $(".cycleunit").text("年")
           }else if(filterObj.cycleunit==2){
             $(".cycleunit").text("个月")
+          }else if(filterObj.cycleunit==3){
+          	 $(".cycleunit").text("天")
           }
+
         }
         
         if(r.data.order.order_status==0){
@@ -224,18 +230,36 @@ try{
           //支付时间
           $(".line_paytime").css("display","");
           if(r.data.order.pay_time) $(".payTime").text(r.data.order.pay_time.replace("-",".").replace("-","."));
+          if (r.data.order.original_price==0){
+         	 $(".line_paytime").css("display","none");
+          }
+          
+          //有效周期
+          $(".line_cycle").css("display","");
+          //有效日期  
+          if(r.data.time.vip_starttime&&r.data.time.vip_endtime){
+            	var vip_starttime=r.data.time.vip_starttime+"";
+           		var vip_endtime=r.data.time.vip_endtime+"";
+           		vip_starttime=vip_starttime.split(" ")[0].replace(/-/g,".");
+           		vip_endtime=vip_endtime.split(" ")[0].replace(/-/g,".");
+           		var serviceTime=vip_starttime+" - "+vip_endtime;
+           	  	$(".serviceTime").text(serviceTime)
+          }
+          
           //支付方式
-          $(".line_payway").css("display","");
           if(r.data.order.pay_way.indexOf("wx")>-1){
+            $(".line_payway").css("display","");
             $(".payWay").text("微信支付");
-          }else{
+          }else if(r.data.order.pay_way.indexOf("ali")>-1){
             $(".payWay").text("支付宝支付");
+            $(".line_payway").css("display","");
+          }else{//试用用户
+            $(".invoice").css("display","none");
+            return
           }
-              
-          //支付订单号
+
           $(".line_transaction").css("display","");
           if(r.data.transaction_id) $(".transaction_id").text(r.data.transaction_id);
-          
           //发票
           if(r.data.order.applybill_status==0){ 
             //已支付未申请发票
@@ -245,7 +269,7 @@ try{
             });
           }else{
             //已支付已申请发票
-			$(".invoice").css("display","none");
+			      $(".invoice").css("display","none");
             switch (r.data.order.applybill_type){
             	case 0:
             	$(".person").css("display","");
@@ -256,14 +280,8 @@ try{
             	$(".taxpayer_number").html(r.data.order.applybill_taxnum);
             	break;
             }
+
           } 
-          
-          //有效周期
-          $(".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))
-          }
         }else if(r.data.order.order_status==-2){
     		$("#pageTitle").text("已取消");
      		$(".invoice").css("display","none");//隐藏开发票

+ 11 - 5
src/web/templates/weixin/vipsubscribe/vip_purchase.html

@@ -64,7 +64,7 @@
             </ul>
             <div class="pay_mode">
                 {{if not .T.isTrial }}
-                <div class="select_payment choose_item" disabled="disabled">
+                <div class="select_payment choose_item">
                     <a href="javascript:;">
                         <span class="label">支付方式</span>
                         <span class="info choose_way">微信支付</span>
@@ -260,6 +260,7 @@
     <script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
     <script src="/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
     <script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
+    {{include "/common/weixin.html"}}
     <script>
       //微信支付start
       {{if not .T.isTrial }}
@@ -269,7 +270,7 @@
   			var id = {{.T._id}}
   			if(signature && signature.length == 4){
   				wx.config({
-  				    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+  				    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
   				    appId: signature[0], // 必填,公众号的唯一标识
   				    timestamp:signature[1], // 必填,生成签名的时间戳
   				    nonceStr: signature[2], // 必填,生成签名的随机串
@@ -417,7 +418,7 @@
         
         
 
-        $(function () {
+        $(function () {           
             purchase.initData();
             purchase.showArea();
             purchase.showIndustry();
@@ -436,6 +437,7 @@
             })
             // 选择支付方式
             $('.select_payment .choose_way').click(function () {
+                return
                 $('#pay_way').show(200);
             })
 
@@ -487,6 +489,10 @@
                 }
                 // 判断是点击的是+ 还是-
                 if ($(e.target).hasClass('add')) {
+                    if(currentNum==11){ //12个月自动跳转1年
+                      $("#number_box_year .year_number:eq(0)").trigger("click");
+                      return
+                    }
                     // 点的+
                     // currentNum = currentNum >= 12 ? 12 : currentNum + 1;
                     currentNum = currentNum >= data.numboxMax ? data.numboxMax : currentNum + data
@@ -618,12 +624,12 @@
                     "time":$(".info:eq(2)").val().trim(),
                     "payWay":"wx_js"
                   }
-                  $DoPost("/front/vipsubscribe/createOrder",param,function(r){
+                  $DoPost("/subscribepay/vipsubscribe/createOrder",param,function(r){
                     if(r.success){
                       clearSessionStorage();
                       onBridgeReady(JSON.parse(r.data.res),r.data.code);
                     }
-                    $("#payHandle").removeAttr("disabled")                    
+                    $("#payHandle").removeAttr("disabled")  
                   })
                 {{else}} 
                   //试用用户