소스 검색

积分支付

wangshan 4 년 전
부모
커밋
0303ea8098

+ 2 - 0
src/jfw/modules/subscribepay/src/a/init.go

@@ -61,6 +61,8 @@ func init() {
 	xweb.AddRouter("/jypay", &service.Bidfile{})
 	//用户信息
 	xweb.AddRouter("/jypay", &service.UserAccount{})
+	//剑鱼币
+	xweb.AddRouter("/jypay", &service.Integral{})
 
 	xweb.AddRouter("/jyactive", &active.Active{})
 }

+ 4 - 4
src/jfw/modules/subscribepay/src/config.json

@@ -22,8 +22,8 @@
     "redisaddrs": "other=192.168.3.128:1712,session=192.168.3.128:1712,push=192.168.3.128:1712,pushcache_1=192.168.3.128:5000,pushcache_2_a=192.168.3.128:5001",
     "elasticsearch": "http://192.168.3.128:9800",
     "elasticPoolSize": 30,
-    "appid": "wx41a95e706276804d",
-    "appsecret": "1b385c7dd14274c5e0898b9b208580b7",
+    "appid": "wx5b1c6e7cc4dac0e4",
+    "appsecret": "b026103ffebd2291b3edb7a269612112",
     "webport": "86",
     "webrpcport": "8600",
     "weixinrpc": "127.0.0.1:8083",
@@ -44,8 +44,8 @@
     "maxIdleConns": 1000
   },
   "appPushServiceRpc": "127.0.0.1:5566",
-  "webdomain": "http://web-jydev-wky.jianyu360.cn",
-  "appdomain": "http://web-jydev-wky.jianyu360.cn",
+  "webdomain": "http://web-jydev-ws.jianyu360.cn",
+  "appdomain": "http://web-jydev-ws.jianyu360.cn",
   "mail": [
     {
       "addr": "smtp.exmail.qq.com",

+ 13 - 0
src/jfw/modules/subscribepay/src/config/config.go

@@ -186,6 +186,18 @@ type Font struct {
 	RedisKey                string `json:"redisKey"`
 }
 
+//
+type Integral struct {
+	BasicIntegral  int  `json:"basicIntegral"`  //最低积分基础购买额度
+	BasicDiscount  int  `json:"basicDiscount"`  //基础折扣
+	ActiveIng      bool `json:"activeIng"`      //活动是否进行
+	ActiveDiscount int  `json:"activeDiscount"` //活动折扣
+	SlewRate       int  `json:"slewRate"`       //积分购买转换率
+}
+
+//积分
+var IntegralConfig *Integral
+
 //数据导出配置文件-end
 
 var Config *config
@@ -218,6 +230,7 @@ func init() {
 	qutil.ReadConfig("./member.json", &MemberConfig)
 	qutil.ReadConfig("./bidfile.json", &BidfileConfig)
 	qutil.ReadConfig("./dataexport.json", &ExConf)
+	qutil.ReadConfig("./integral.json", &IntegralConfig)
 	for _, v := range Config.Mail {
 		mail := &mail.GmailAuth{
 			SmtpHost: v.Addr,

+ 54 - 0
src/jfw/modules/subscribepay/src/entity/integral.go

@@ -0,0 +1,54 @@
+package entity
+
+import (
+	"encoding/json"
+	"log"
+	qutil "qfw/util"
+	"time"
+	"util"
+)
+
+type integral struct{}
+
+var Integral integral
+var integralServiceId = 11
+
+//招标文件解读支付完成回调方法
+func (b *integral) PayCallBack(param *CallBackParam) bool {
+	query := map[string]interface{}{}
+	if param.OrderCode != "" { //线下支付
+		query["order_code"] = param.OrderCode
+	} else { //支付宝微信回调
+		query["out_trade_no"] = param.OutTradeno
+	}
+	orderdata := util.Mysql.FindOne("dataexport_order", query, "id,filter,order_status,user_id,product_type", "")
+	if orderdata == nil {
+		return false
+	}
+	userId := qutil.ObjToString((*orderdata)["user_id"])
+	if qutil.IntAll((*orderdata)["order_status"]) == 0 {
+		now := time.Now()
+		nowFormat := qutil.FormatDate(&now, qutil.Date_Full_Layout)
+		product_type := qutil.ObjToString((*orderdata)["product_type"])
+		var filter map[string]interface{}
+		if err := json.Unmarshal([]byte(qutil.ObjToString((*orderdata)["filter"])), &filter); err != nil {
+			log.Println("招标文件解读支付成功json.Unmarshal出错", err)
+		} else {
+			score := qutil.IntAll(filter["score"])
+			update := util.Mysql.Update("dataexport_order", map[string]interface{}{
+				"id": (*orderdata)["id"],
+			}, map[string]interface{}{
+				"pay_money":    param.CashFee,
+				"pay_time":     nowFormat,
+				"order_status": 1,
+			})
+			if update {
+				//取消其他订单
+				go PayCancel(userId, "剑鱼币", "")
+				//调用积分接口 给用户增加积分
+				log.Println(product_type, "-----score--:", score)
+			}
+		}
+	}
+	return true
+}

+ 7 - 0
src/jfw/modules/subscribepay/src/integral.json

@@ -0,0 +1,7 @@
+{
+	"basicIntegral":100,
+	"basicDiscount":1,
+	"activeIng":false,
+	"activeDiscount":1,
+	"slewRate":100
+}

+ 23 - 14
src/jfw/modules/subscribepay/src/pay/aliPay.go

@@ -32,6 +32,7 @@ type aliPayStruct struct {
 	Subject_member         string          //支付小标题
 	Subject_aiforecastpack string          //支付小标题
 	Subject_bidfile        string          //支付小标题
+	Subject_integral       string          //剑鱼币支付小标题
 }
 
 var Alipay *aliPayStruct
@@ -62,6 +63,7 @@ func init() {
 		Subject_member:         qutil.ObjToString(config.AliPayConf["Subject_member"]),
 		Subject_aiforecastpack: qutil.ObjToString(config.AliPayConf["Subject_aiforecastpack"]),
 		Subject_bidfile:        qutil.ObjToString(config.AliPayConf["Subject_bidfile"]),
+		Subject_integral:       qutil.ObjToString(config.AliPayConf["Subject_integral"]),
 	}
 }
 
@@ -78,20 +80,22 @@ const (
 	ALI_DATAREPORT_APP    = "X" //支付宝数据报告-app支付
 	ALI_DATAREPORT_NATIVE = "x" //支付宝数据报告-扫码支付
 
-	ALI_SUBVIP_NATIVE         = "y" //支付宝vip订阅-扫码支付
-	ALI_SUBVIP_APP            = "Y" //支付宝数vip订阅--扫码支付
-	ALI_COURSE_NATIVE         = "v" //剑鱼招投标课程-扫码支付
-	ALI_COURSE_APP            = "V" //剑鱼招投标课程-app支付
-	ALI_ENTNICHE_APP          = "U" //支付宝企业商机管理--app支付
-	ALI_ENTNICHE_NATIVE       = "u" //支付宝企业商机管理--pc支付
-	ALI_COURSEONLINE_NATIVE   = "t" //剑鱼线上课程-扫码支付
-	ALI_COURSEONLINE_APP      = "T" //剑鱼线上课程-app支付
-	ALI_MEMBER_NATIVE         = "s" //剑鱼大会员-扫码支付
-	ALI_MEMBER_APP            = "S" //剑鱼大会员-扫码支付
-	ALI_AIFORECASTPACK_NATIVE = "r" //剑鱼大会员-ai中标预测包-扫码支付
-	ALI_AIFORECASTPACK_APP    = "R" //剑鱼大会员-ai中标预测包-扫码支付
-	ALI_BIDFILE_NATIVE        = "q" //招标文件解读扫码支付
-	ALI_BIDFILE_APP           = "Q" //招标文件解读app支付
+	ALI_SUBVIP_NATIVE         = "y"  //支付宝vip订阅-扫码支付
+	ALI_SUBVIP_APP            = "Y"  //支付宝数vip订阅--扫码支付
+	ALI_COURSE_NATIVE         = "v"  //剑鱼招投标课程-扫码支付
+	ALI_COURSE_APP            = "V"  //剑鱼招投标课程-app支付
+	ALI_ENTNICHE_APP          = "U"  //支付宝企业商机管理--app支付
+	ALI_ENTNICHE_NATIVE       = "u"  //支付宝企业商机管理--pc支付
+	ALI_COURSEONLINE_NATIVE   = "t"  //剑鱼线上课程-扫码支付
+	ALI_COURSEONLINE_APP      = "T"  //剑鱼线上课程-app支付
+	ALI_MEMBER_NATIVE         = "s"  //剑鱼大会员-扫码支付
+	ALI_MEMBER_APP            = "S"  //剑鱼大会员-扫码支付
+	ALI_AIFORECASTPACK_NATIVE = "r"  //剑鱼大会员-ai中标预测包-扫码支付
+	ALI_AIFORECASTPACK_APP    = "R"  //剑鱼大会员-ai中标预测包-扫码支付
+	ALI_BIDFILE_NATIVE        = "q"  //招标文件解读扫码支付
+	ALI_BIDFILE_APP           = "Q"  //招标文件解读app支付
+	ALI_INTEGRAL_NATIVE       = "aa" //剑鱼币扫码支付
+	ALI_INTEGRAL_APP          = "AB" //剑鱼币app支付
 )
 
 func (w *aliPayStruct) GetTradeno(tradenoSign string) (string, string) {
@@ -114,8 +118,13 @@ func (w *aliPayStruct) GetTradeno(tradenoSign string) (string, string) {
 		subject = w.Subject_aiforecastpack
 	} else if tradenoSign == ALI_BIDFILE_APP || tradenoSign == ALI_BIDFILE_NATIVE {
 		subject = w.Subject_bidfile
+	} else if tradenoSign == ALI_INTEGRAL_APP || tradenoSign == ALI_INTEGRAL_NATIVE {
+		subject = w.Subject_integral
 	}
 	tradeno = fmt.Sprintf("%s_%d%s%s", tradenoSign, time.Now().UnixNano(), qutil.GetRandom(5), qutil.GetLetterRandom(6))
+	if len([]rune(tradenoSign)) > 1 {
+		tradeno = fmt.Sprintf("%s_%d%s%s", tradenoSign, time.Now().UnixNano(), qutil.GetRandom(4), qutil.GetLetterRandom(6))
+	}
 	return tradeno, subject
 }
 

+ 11 - 1
src/jfw/modules/subscribepay/src/pay/util.go

@@ -99,6 +99,14 @@ var (
 		"ali_app": ALI_BIDFILE_APP,
 		"ali_pc":  ALI_BIDFILE_NATIVE,
 	}
+	//剑鱼币
+	integralMap = map[string]string{
+		"wx_js":   WX_INTEGRAL_JSAPI,
+		"wx_app":  WX_INTEGRAL_APP,
+		"wx_pc":   WX_INTEGRAL_NATIVE,
+		"ali_app": ALI_INTEGRAL_APP,
+		"ali_pc":  ALI_INTEGRAL_NATIVE,
+	}
 	PayWayAndSign = map[string]map[string]string{
 		"subvip":         vipMap,
 		"entniche":       entnicheMap,
@@ -109,16 +117,18 @@ var (
 		"member":         memberMap,
 		"aiForecastPack": aiForecastPackMap,
 		"bidfile":        bifileMap,
+		"integral":       integralMap,
 		"VIP订阅":          vipMap,
 		"企业商机管理":         entnicheMap,
 		"历史数据":           dataexportMap,
 		"招投标课程":          courseMap,
 		"数据报告":           datareportMap,
-		"中标必听课":           onlineCourseMap,
+		"中标必听课":          onlineCourseMap,
 		"大会员":            memberMap,
 		"大会员-AI中标预测包":    aiForecastPackMap,
 		"招标文件解读":         bifileMap,
 		"大会员-招标文件解读":     bifileMap,
+		"剑鱼币":            integralMap,
 	}
 	varOrderCode *orderCode
 )

+ 40 - 30
src/jfw/modules/subscribepay/src/pay/wxPay.go

@@ -12,33 +12,36 @@ import (
 )
 
 const (
-	WX_REWARD_JSAPI          = "a" //微信打赏
-	WX_DATAEXPORT_NATIVE     = "b" //数据导出-扫码支付
-	WX_DATAEXPORT_JSAPI      = "c" //数据导出-微信js支付
-	WX_DATAEXPORT_APP        = "C" //数据导出-微信app支付
-	WX_DATAREPORT_JSAPI      = "d" //数据报告-微信js支付
-	WX_DATAREPORT_APP        = "D" //数据报告-微信app支付
-	WX_SUBVIP_JSAPI          = "e" //VIP订阅-js支付
-	WX_SUBVIP_APP            = "E" //VIP订阅-APP支付
-	WX_COURSE_JSAPI          = "f" //剑鱼招投标课程-js支付
-	WX_COURSE_APP            = "F" //剑鱼招投标课程-APP支付
-	WX_COURSE_NATIVE         = "g" //剑鱼招投标课程-扫码支付
-	WX_ENTNICHE_APP          = "H" //企业商机管理-APP支付
-	WX_COURSEONLINE_JSAPI    = "i" //课程线上课程-js支付
-	WX_COURSEONLINE_APP      = "I" //剑鱼线上课程-APP支付
-	WX_COURSEONLINE_NATIVE   = "j" //剑鱼线上课程-扫码支付
-	WX_DATAREPORT_NATIVE     = "k" //数据报告-扫码支付
-	WX_SUBVIP_NATIVE         = "l" //VIP订阅-扫码支付
-	WX_ENTNICHE_NATIVE       = "m" //商机管理-pc支付
-	WX_MEMBER_JSAPI          = "n" //大会员-微信js支付
-	WX_MEMBER_APP            = "N" //大会员-APP支付
-	WX_MEMBER_NATIVE         = "o" //大会员-PC支付
-	WX_AIFORECASTPACK_JSAPI  = "P" //大会员-AI中标预测包-微信js支付
-	WX_AIFORECASTPACK_APP    = "p" //大会员-AI中标预测包-APP支付
-	WX_AIFORECASTPACK_NATIVE = "q" //大会员-AI中标预测包-PC支付
-	WX_BIDFILE_JSAPI         = "R" //招标文件解读-微信js支付
-	WX_BIDFILE_APP           = "r" //招标文件解读-APP支付
-	WX_BIDFILE_NATIVE        = "S" //招标文件解读-PC支付
+	WX_REWARD_JSAPI          = "a"  //微信打赏
+	WX_DATAEXPORT_NATIVE     = "b"  //数据导出-扫码支付
+	WX_DATAEXPORT_JSAPI      = "c"  //数据导出-微信js支付
+	WX_DATAEXPORT_APP        = "C"  //数据导出-微信app支付
+	WX_DATAREPORT_JSAPI      = "d"  //数据报告-微信js支付
+	WX_DATAREPORT_APP        = "D"  //数据报告-微信app支付
+	WX_SUBVIP_JSAPI          = "e"  //VIP订阅-js支付
+	WX_SUBVIP_APP            = "E"  //VIP订阅-APP支付
+	WX_COURSE_JSAPI          = "f"  //剑鱼招投标课程-js支付
+	WX_COURSE_APP            = "F"  //剑鱼招投标课程-APP支付
+	WX_COURSE_NATIVE         = "g"  //剑鱼招投标课程-扫码支付
+	WX_ENTNICHE_APP          = "H"  //企业商机管理-APP支付
+	WX_COURSEONLINE_JSAPI    = "i"  //课程线上课程-js支付
+	WX_COURSEONLINE_APP      = "I"  //剑鱼线上课程-APP支付
+	WX_COURSEONLINE_NATIVE   = "j"  //剑鱼线上课程-扫码支付
+	WX_DATAREPORT_NATIVE     = "k"  //数据报告-扫码支付
+	WX_SUBVIP_NATIVE         = "l"  //VIP订阅-扫码支付
+	WX_ENTNICHE_NATIVE       = "m"  //商机管理-pc支付
+	WX_MEMBER_JSAPI          = "n"  //大会员-微信js支付
+	WX_MEMBER_APP            = "N"  //大会员-APP支付
+	WX_MEMBER_NATIVE         = "o"  //大会员-PC支付
+	WX_AIFORECASTPACK_JSAPI  = "P"  //大会员-AI中标预测包-微信js支付
+	WX_AIFORECASTPACK_APP    = "p"  //大会员-AI中标预测包-APP支付
+	WX_AIFORECASTPACK_NATIVE = "q"  //大会员-AI中标预测包-PC支付
+	WX_BIDFILE_JSAPI         = "R"  //招标文件解读-微信js支付
+	WX_BIDFILE_APP           = "r"  //招标文件解读-APP支付
+	WX_BIDFILE_NATIVE        = "S"  //招标文件解读-PC支付
+	WX_INTEGRAL_JSAPI        = "AA" //剑鱼币-微信js支付
+	WX_INTEGRAL_APP          = "ab" //剑鱼币-APP支付
+	WX_INTEGRAL_NATIVE       = "AC" //剑鱼币-PC支付
 )
 
 var WxStruct *WeixinStruct
@@ -61,6 +64,7 @@ type WeixinStruct struct {
 	Aiforecastpage_msg string
 	Bidfile_msg        string
 	OpenidSwitch       *map[string]interface{}
+	Integral_msg       string
 }
 
 func init() {
@@ -84,10 +88,14 @@ func init() {
 		Aiforecastpage_msg: util.ObjToString(payConfig["aiforecastpage_msg"]),
 		Bidfile_msg:        util.ObjToString(payConfig["bidfile_msg"]),
 		OpenidSwitch:       util.ObjToMap(config.WxPayConf["openidSwitch"]),
+		Integral_msg:       util.ObjToString(payConfig["integral_msg"]),
 	}
 }
 
 func (w *WeixinStruct) GetTradeno(tp string) string {
+	if len([]rune(tp)) > 1 {
+		return fmt.Sprintf("%s_%d%s%s", tp, time.Now().UnixNano(), util.GetRandom(4), util.GetLetterRandom(6))
+	}
 	return fmt.Sprintf("%s_%d%s%s", tp, time.Now().UnixNano(), util.GetRandom(5), util.GetLetterRandom(6))
 }
 
@@ -121,16 +129,18 @@ func (w *WeixinStruct) CreatePrepayOrder(tradeno, ip, openid, detailmsg string,
 		attachmsg, bodymsg, detailmsg = w.Aiforecastpage_msg, w.Aiforecastpage_msg, w.Aiforecastpage_msg
 	} else if tradeno == WX_BIDFILE_APP || tradeno == WX_BIDFILE_JSAPI || tradeno == WX_BIDFILE_NATIVE {
 		attachmsg, bodymsg, detailmsg = w.Bidfile_msg, w.Bidfile_msg, w.Bidfile_msg
+	} else if tradeno == WX_INTEGRAL_APP || tradeno == WX_INTEGRAL_JSAPI || tradeno == WX_INTEGRAL_NATIVE {
+		attachmsg, bodymsg, detailmsg = w.Integral_msg, w.Integral_msg, w.Integral_msg
 	}
 	//支付类型分类
 
 	tradeType, appid := "", w.Appid
-	if tradeno == WX_REWARD_JSAPI || tradeno == WX_DATAEXPORT_JSAPI || tradeno == WX_DATAREPORT_JSAPI || tradeno == WX_SUBVIP_JSAPI || tradeno == WX_COURSE_JSAPI || tradeno == WX_COURSEONLINE_JSAPI || tradeno == WX_MEMBER_JSAPI || tradeno == WX_AIFORECASTPACK_JSAPI || tradeno == WX_BIDFILE_JSAPI { //微信js支付
+	if tradeno == WX_REWARD_JSAPI || tradeno == WX_DATAEXPORT_JSAPI || tradeno == WX_DATAREPORT_JSAPI || tradeno == WX_SUBVIP_JSAPI || tradeno == WX_COURSE_JSAPI || tradeno == WX_COURSEONLINE_JSAPI || tradeno == WX_MEMBER_JSAPI || tradeno == WX_AIFORECASTPACK_JSAPI || tradeno == WX_BIDFILE_JSAPI || tradeno == WX_INTEGRAL_JSAPI { //微信js支付
 		tradeType = "JSAPI"
-	} else if tradeno == WX_DATAEXPORT_APP || tradeno == WX_DATAREPORT_APP || tradeno == WX_SUBVIP_APP || tradeno == WX_COURSE_APP || tradeno == WX_ENTNICHE_APP || tradeno == WX_COURSEONLINE_APP || tradeno == WX_MEMBER_APP || tradeno == WX_AIFORECASTPACK_APP || tradeno == WX_BIDFILE_APP { //app支付
+	} else if tradeno == WX_DATAEXPORT_APP || tradeno == WX_DATAREPORT_APP || tradeno == WX_SUBVIP_APP || tradeno == WX_COURSE_APP || tradeno == WX_ENTNICHE_APP || tradeno == WX_COURSEONLINE_APP || tradeno == WX_MEMBER_APP || tradeno == WX_AIFORECASTPACK_APP || tradeno == WX_BIDFILE_APP || tradeno == WX_INTEGRAL_APP { //app支付
 		tradeType = "APP"
 		appid = w.Appid_app
-	} else if tradeno == WX_DATAEXPORT_NATIVE || tradeno == WX_COURSE_NATIVE || tradeno == WX_COURSEONLINE_NATIVE || tradeno == WX_DATAREPORT_NATIVE || tradeno == WX_ENTNICHE_NATIVE || tradeno == WX_SUBVIP_NATIVE || tradeno == WX_MEMBER_NATIVE || tradeno == WX_AIFORECASTPACK_NATIVE || tradeno == WX_BIDFILE_NATIVE { //扫码支付
+	} else if tradeno == WX_DATAEXPORT_NATIVE || tradeno == WX_COURSE_NATIVE || tradeno == WX_COURSEONLINE_NATIVE || tradeno == WX_DATAREPORT_NATIVE || tradeno == WX_ENTNICHE_NATIVE || tradeno == WX_SUBVIP_NATIVE || tradeno == WX_MEMBER_NATIVE || tradeno == WX_AIFORECASTPACK_NATIVE || tradeno == WX_BIDFILE_NATIVE || tradeno == WX_INTEGRAL_NATIVE { //扫码支付
 		tradeType = "NATIVE"
 	}
 	tradeno = w.GetTradeno(tradeno)

+ 5 - 2
src/jfw/modules/subscribepay/src/pay_config.json

@@ -16,7 +16,8 @@
 			"entniche_msg":"剑鱼标讯-企业商机管理",
 			"member_msg":"剑鱼标讯-大会员",
 			"aiforecastpage_msg":"剑鱼标讯-大会员",
-			"bidfile_msg":"剑鱼标讯-招标文件解读"
+			"bidfile_msg":"剑鱼标讯-招标文件解读",
+			"integral_msg":"剑鱼标讯-剑鱼币"
         },
         "openidSwitch": {
             "oIMvJvrVXG89597EFmYiSiznbyyY": "oHwE_wEQlEBvjZJOyZeNnQcgKQMo",
@@ -27,7 +28,8 @@
             "oy1us5qlO6ChAyVHyg0liYrXFmno": "oHwE_wPWFBR_RSNBV4BH3BfngSg0",
             "oRvqm1JFuhAbiWOYr_WgQI4rR9as":"oHwE_wPk1VERbfcK2GRYtFWaStpk",
             "obfSO1dq09gMGOq7_-VaJ-WmXvhI": "oHwE_wPWFBR_RSNBV4BH3BfngSg0",
-            "o043a5hr4gD9e1Yy8DSNjy9BX3U4":"oHwE_wKJKZxGJdTCSUWSp46lAVNg"
+            "o043a5hr4gD9e1Yy8DSNjy9BX3U4":"oHwE_wKJKZxGJdTCSUWSp46lAVNg",
+            "oIISp0Zljqnv1xNWfbAMGSHFmK3c":"oHwE_wJZpWgPy7vc5bi5FanQoev8"
         }
     },
     "aliPay": {
@@ -42,6 +44,7 @@
 		"Subject_member":"剑鱼标讯-大会员",
 		"Subject_aiforecastpack":"剑鱼标讯-大会员",
 		"Subject_bidfile":"剑鱼标讯-招标文件解读",
+		"Subject_integral":"剑鱼标讯-剑鱼币",
         "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAtO7CU4hpdcMmV43MEA8bqQJYYx+f6yvYkP0nFc/oCvU24bU6zAdK/H2H56quEwD8Dh5YtVTfUCcKqpcG9HXY11TXWKCEUQiK1tkb0o7oSSURwk6h1DdDbg8m1+H8s+k+mvMvcqVCYKYi03PIPQyJCuHmzx/vcaALXRr2HOrEFaFFA8WYST1rywiKeyrC9PCNX1aJjGADhCs3cGrdZEJc4k+2tIHTYJccx+mJ96QiEkzFhJTqEmSFPcNqNUX9uCPgeVhfHW2pRNyffvrhoEyeSr1QoOpaYyn0I5JD2axnypBFCbk6P69LY3eGNKtOe81lp9hiZbMYpXPqb6KwPXTVQQIDAQABAoIBAEbJQm276MaR2uZWK4f84S12JW5iaQZw2QGgiTIXbQkcdqRHawF3uPafhhQ0ynXU5MgBR2NqGRQasimbfLUXhgZ4wueBpUKuvOLhfekaz/YN8qy6ZsXH+TGN6/x6BYu9rSiiC+YmkZmOZgGkQqrfxJ3lU4+lRuCFZOzAJ5mYn652CHRJXy6eDgZfyFLP2ol4/ioJEhwnGFXV345DlsVgmXTEe+IfjTyuvzxBtjod4lfu3dj/f2PhPrcgvN0ZQf1ldZbS+6FkMWInMOQt/WsJ/ANfiKgQ4sPzlxIhmVjrvDlnYTc1lbFekyInzZumV0pDyId+1Y6LAjxJTAhnjFAlBSECgYEAwsQdxOiZNLtxZ8J8JCQHKERYIo7euArW0iAurF+3Q9VNeGj0voFrmfHPju5OF5BHtuc7D3lkwZG4Ac+pyQtxF5dsEMl4vBoNc6onRQFsSDVEEIpl7OBghGlg1as23tvPSMh7DKnILM9OzVfFQ9WLvwHJwLRGsM7LOtmNovq4UFsCgYEA7dE/9Avr5YtCUjij8Y2zkAxN6qb8+ggqFoPiCr91JNGaKNKV9D2K7D3Zk49TXFJm7SX2zgYFuqR2Pa9vAWh9jtmwsc8L0qpIym4J1MM5ud/Xiu9c8O/prQOr7JlICNdk8WfqGbUC83BYfWa5SDonlXFYi6x3LlXdZnvEfZF645MCgYAC2ZnR6tFrGx8StJ7abIiKR02+27ZYnRf9pSjprtDgtjtW+royG3S2oPo3jjcoUx0piQKtPEqEJpy5sg86+ObjwHx9VmVk40C1I5VFhjrOZ7EiSNQq/jGLXntjRQkdg7vpxb0/NzDNrw7pJFKnpnVQCzenkTvDlJMWvl47N04BJwKBgHnpVtuIcPlPFkSH/KMLfQ1PAXJVAEI8hTbdjLbtxuOE/34F1hFKqzjHzA2034roQxM27vpWZAF15Zdho4oZQqREPCwqc2kfGgmLt0Z2fdUnRptWcVKh6ixjQXMccKz3niuSlZNwE38wDGzciAbaqQgW/sk7NC1wnvq2X9fvCAw5AoGANG2usqWYF4x+LvbhcdrKpJsjtvkLa2u9g2/wNXdoj+tBrv310O22/YM5LOcq9MrKPlx1S1C1KLoQO9TWFZiYuQ9C/sk7/ZTNmKQxCxVV0FVPaBYp+meD6sjgoRVJvaqY0UxnJwlHWMrusPTFua7Mtogqx9cvzlQolWh5VX7N1DM=\n-----END RSA PRIVATE KEY-----",
         "callbackPublicKey":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFZfev75+sa7O0f29qwuWeqWRQ+p59c8hz2s4aeh5Ohc08P1ls5e8UmPhaN9ZTkGwabOKN658pOhmVoa16ldKFZQ5j1hLTDS6yfKcvVs/hf1mQvsbUjtZgCfMQx5NNf1R4MsTvAqbl2l6DXMu7gHjAhKNR0QQBELv7HmYuWPE35ELQqBH0eVcvWSNV3/3zOansftY5NIT749B+Bv1uirE8PNMp20sWWqx8fMNi2EZksnWNUmnVldBqUwMJIxcXolBH/RGX5ZjBlBenoIB3PVQ8/+SPz9Hip7+QNH8utSnUlrh2AsJVtdNKIQk74Eevkn+Q+WyUVGoY0ca9DzGwh4hQIDAQAB"
     },

+ 2 - 1
src/jfw/modules/subscribepay/src/service/bigmember.go

@@ -6,12 +6,13 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
-	"github.com/go-xweb/xweb"
 	"log"
 	"pay"
 	qutil "qfw/util"
 	"qfw/util/jy"
 	"util"
+
+	"github.com/go-xweb/xweb"
 )
 
 type Bigmember struct {

+ 131 - 0
src/jfw/modules/subscribepay/src/service/integral.go

@@ -0,0 +1,131 @@
+package service
+
+import (
+	. "api"
+	"config"
+	"encoding/json"
+	"log"
+	"pay"
+	qutil "qfw/util"
+	"qfw/util/jy"
+	"util"
+
+	"github.com/go-xweb/xweb"
+)
+
+type Integral struct {
+	*xweb.Action
+	createOrder xweb.Mapper `xweb:"/Integral/createOrder"` //创建订单
+	getPrice    xweb.Mapper `xweb:"/Integral/getPrice"`    //获取剑鱼币价格
+}
+
+//
+func (b *Integral) GetPrice() {
+	//参数验证 price:价格(已折扣);score:购买积分
+	if !R.CheckReqParam(b.ResponseWriter, b.Request, "score") {
+		return
+	}
+	if b.Method() != "POST" {
+		b.ServeJson(Result{
+			Error_msg: "请求方式有误",
+		})
+		return
+	}
+	r := func() Result {
+		defer qutil.Catch()
+		userId := qutil.ObjToString(b.GetSession("userId"))
+		if userId == "" {
+			return Result{-1, "未登录", nil}
+		}
+		score, _ := b.GetInteger("score")
+		order_money := getIntegralMoney(userId, -1, score)
+		if order_money == -1 {
+			return Result{-1, "剑鱼币生成订单价格计算错误", nil}
+		}
+		return Result{Data: map[string]interface{}{
+			"price": order_money,
+		},
+		}
+	}()
+	b.ServeJson(r)
+}
+
+//创建订单
+func (b *Integral) CreateOrder() {
+	//参数验证 price:价格(已折扣);score:购买积分
+	if !R.CheckReqParam(b.ResponseWriter, b.Request, "price", "score") {
+		return
+	}
+	if b.Method() != "POST" {
+		b.ServeJson(Result{
+			Error_msg: "请求方式有误",
+		})
+		return
+	}
+	r := func() Result {
+		defer qutil.Catch()
+		userId := qutil.ObjToString(b.GetSession("userId"))
+		if userId == "" {
+			return Result{-1, "未登录", nil}
+		}
+		price, _ := b.GetInteger("price")
+		score, _ := b.GetInteger("score")
+		order_money := getIntegralMoney(userId, price, score)
+		if order_money == -1 {
+			return Result{-1, "剑鱼币生成订单价格计算错误", nil}
+		}
+		code := pay.GetOrderCode(userId)
+		filter_map := map[string]interface{}{
+			"price": price,
+			"score": score,
+		}
+		filter, _ := json.Marshal(filter_map)
+		insertObj := map[string]interface{}{
+			"order_money":    order_money,
+			"order_status":   0,
+			"filter":         string(filter),
+			"order_code":     code,
+			"product_type":   "剑鱼币",
+			"create_time":    qutil.NowFormat(qutil.Date_Full_Layout),
+			"prepay_time":    qutil.NowFormat(qutil.Date_Full_Layout),
+			"user_id":        userId,
+			"pay_way":        "",
+			"original_price": order_money,
+		}
+		order_phone := b.GetString("order_phone") //p19.3用户信息采集 手机号
+		if order_phone != "" {
+			if !jy.PhoneReg.MatchString(order_phone) {
+				return Result{-1, "手机号格式异常", nil}
+			}
+			insertObj["user_phone"] = order_phone
+		}
+		order_id := util.Mysql.Insert("dataexport_order", insertObj)
+		log.Println("剑鱼币购买订单", userId, order_id, code)
+		if order_id > 0 {
+			return Result{0, "", M{"order_code": code}}
+		}
+		return Result{-1, "剑鱼币生成订单失败", nil}
+	}()
+	b.ServeJson(r)
+}
+
+//验证价格
+func getIntegralMoney(userId string, price, score int) int {
+	//原价(分)
+	original_price := score * 100 / config.IntegralConfig.SlewRate
+	//基础折扣
+	order_price := original_price * config.IntegralConfig.BasicDiscount
+	if config.IntegralConfig.ActiveIng {
+		//活动折扣
+		order_price = order_price * config.IntegralConfig.ActiveDiscount
+	}
+	if price > 0 {
+		//价格验证
+		if order_price == price {
+			return price
+		}
+	} else {
+		return order_price
+	}
+	return -1
+}

+ 14 - 0
src/jfw/modules/subscribepay/src/service/payCallback.go

@@ -94,6 +94,11 @@ func (this *PayCallBackAction) TestPay() {
 			log.Printf("大会员-AI中标预测包更新执行出错 %+v\n", thisParam)
 			return
 		}
+	} else if typeFlag == "剑鱼币" {
+		if !entity.Integral.PayCallBack(thisParam) {
+			log.Printf("大会员-AI中标预测包更新执行出错 %+v\n", thisParam)
+			return
+		}
 	} else {
 		this.Write("未知支付类型" + typeFlag)
 	}
@@ -183,6 +188,11 @@ func (a *PayCallBackAction) AliPayCallback() {
 				log.Println("支付宝招标文件解读更新执行出错 %+v\n", thisParam)
 				return false
 			}
+		} else if strings.HasPrefix(thisParam.OutTradeno, pay.ALI_INTEGRAL_APP) || strings.HasPrefix(thisParam.OutTradeno, pay.ALI_INTEGRAL_NATIVE) { //剑鱼币
+			if !entity.Integral.PayCallBack(thisParam) {
+				log.Println("支付宝剑鱼币更新执行出错 %+v\n", thisParam)
+				return false
+			}
 		} else {
 			log.Printf("支付宝支付完成回调 未知订单类型%s\n", thisParam.OutTradeno)
 		}
@@ -266,6 +276,10 @@ func (p *PayCallBackAction) WxPayCallback() {
 			if update = entity.Bidfile.PayCallBack(thisParam); !update {
 				log.Printf("微信招标文件解读更新执行出错 %+v\n", thisParam)
 			}
+		} else if strings.HasPrefix(thisParam.OutTradeno, pay.WX_INTEGRAL_APP) || strings.HasPrefix(thisParam.OutTradeno, pay.WX_INTEGRAL_JSAPI) || strings.HasPrefix(thisParam.OutTradeno, pay.WX_INTEGRAL_NATIVE) { //剑鱼币
+			if update = entity.Integral.PayCallBack(thisParam); !update {
+				log.Printf("微信剑鱼币更新执行出错 %+v\n", thisParam)
+			}
 		} else {
 			log.Printf("微信支付完成回调 未知订单类型%s\n", thisParam.OutTradeno)
 		}