|
@@ -4,7 +4,11 @@ import (
|
|
"encoding/json"
|
|
"encoding/json"
|
|
"entity"
|
|
"entity"
|
|
"errors"
|
|
"errors"
|
|
|
|
+ "github.com/dchest/captcha"
|
|
|
|
+ "github.com/go-xweb/httpsession"
|
|
|
|
+ "gopkg.in/mgo.v2/bson"
|
|
"pay"
|
|
"pay"
|
|
|
|
+ "regexp"
|
|
|
|
|
|
"log"
|
|
"log"
|
|
|
|
|
|
@@ -17,11 +21,166 @@ import (
|
|
"github.com/go-xweb/xweb"
|
|
"github.com/go-xweb/xweb"
|
|
)
|
|
)
|
|
|
|
|
|
-//订单结构
|
|
|
|
|
|
+//试用用户
|
|
type TrialOrder struct {
|
|
type TrialOrder struct {
|
|
*xweb.Action
|
|
*xweb.Action
|
|
- getTrialOrderPayMsg xweb.Mapper `xweb:"/order/getTrialOrderPayMsg"` //订单数据展示(支付成功页面)
|
|
|
|
|
|
+ getUserPhone xweb.Mapper `xweb:"/trial/GetUserPhone"` //获取用户手机号码
|
|
|
|
+ captcha xweb.Mapper `xweb:"/trial/captcha"` //图形验证码
|
|
|
|
+ sendPhoneCaptcha xweb.Mapper `xweb:"/trial/sendPhoneCaptcha"` //发送手机验证码
|
|
|
|
+ submitApply xweb.Mapper `xweb:"/trial/submitApply"` //提交申请信息
|
|
trialPay xweb.Mapper `xweb:"/order/trialPay"` //试用用户创建订单
|
|
trialPay xweb.Mapper `xweb:"/order/trialPay"` //试用用户创建订单
|
|
|
|
+ getTrialOrderPayMsg xweb.Mapper `xweb:"/order/getTrialOrderPayMsg"` //订单数据展示(支付成功页面)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var (
|
|
|
|
+ phoneReg = regexp.MustCompile("^[1][3-9][0-9]{9}$")
|
|
|
|
+ nameReg = regexp.MustCompile("^[\u4E00-\u9FA5A-Za-z\\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$")
|
|
|
|
+)
|
|
|
|
+//获取之前用户信息
|
|
|
|
+func (t *TrialOrder) GetUserPhone() {
|
|
|
|
+ var phoneNum string
|
|
|
|
+ userId := qutil.ObjToString(t.GetSession("userId"))
|
|
|
|
+ if userId != "" {
|
|
|
|
+ m, ok := util.MQFW.FindById("user", userId, `{"s_phone":1}`)
|
|
|
|
+ if ok && len(*m) > 0 {
|
|
|
|
+ phoneNum = qutil.ObjToString((*m)["s_phone"])
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if phoneNum == "" {
|
|
|
|
+ openid := qutil.ObjToString(t.GetSession("s_m_openid"))
|
|
|
|
+ if openid != "" {
|
|
|
|
+ m, ok := util.MQFW.FindOneByField("applysub_user", bson.M{"s_openid": openid}, `{"s_phone":1}`)
|
|
|
|
+ if ok && len(*m) > 0 {
|
|
|
|
+ phoneNum = qutil.ObjToString((*m)["s_phone"])
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ t.ServeJson(map[string]interface{}{
|
|
|
|
+ "success": qutil.If(phoneNum == "", false, true).(bool),
|
|
|
|
+ "phoneNum": phoneNum,
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//试用用户图片验证码
|
|
|
|
+func (t *TrialOrder) Captcha() error {
|
|
|
|
+ id := captcha.NewLen(4)
|
|
|
|
+ t.SetSession("subvip_trial_imgCode", id)
|
|
|
|
+ w := t.ResponseWriter
|
|
|
|
+ w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
|
|
|
+ w.Header().Set("Pragma", "no-cache")
|
|
|
|
+ w.Header().Set("Expires", "0")
|
|
|
|
+ w.Header().Set("Content-Type", "image/png")
|
|
|
|
+ return captcha.WriteImage(w, id, 90, 30)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//发送手机验证码
|
|
|
|
+func (t *TrialOrder) SendPhoneCaptcha() {
|
|
|
|
+ phoneNum := t.GetString("phoneNum")
|
|
|
|
+ imgcode_req := t.GetString("imgCancode")
|
|
|
|
+ ok, errMsg := func() (bool, string) {
|
|
|
|
+ if !phoneReg.MatchString(phoneNum) {
|
|
|
|
+ return false, "手机格式不正确"
|
|
|
|
+ }
|
|
|
|
+ imgcode_sess := qutil.ObjToString(t.GetSession("subvip_trial_imgCode"))
|
|
|
|
+ if !captcha.VerifyString(imgcode_sess, imgcode_req) || imgcode_req == "" {
|
|
|
|
+ return false, "验证码不正确"
|
|
|
|
+ }
|
|
|
|
+ //获取上次发送验证码时间
|
|
|
|
+ lastSend := qutil.Int64All(t.GetSession("subvip_trial_lastSend"))
|
|
|
|
+ if time.Now().Unix()-lastSend < 60 {
|
|
|
|
+ return false, "信息已发送"
|
|
|
|
+ }
|
|
|
|
+ //判断手机号是否存在
|
|
|
|
+ if isExist(phoneNum) {
|
|
|
|
+ return false, "手机号已使用"
|
|
|
|
+ }
|
|
|
|
+ MsgCode := qutil.GetRandom(6)
|
|
|
|
+ t.SetSession("subvip_trial_MsgCode", MsgCode)
|
|
|
|
+ t.SetSession("subvip_trial_phoneNum", phoneNum)
|
|
|
|
+ t.SetSession("subvip_trial_lastSend", time.Now().Unix())
|
|
|
|
+ log.Printf("%s 发送短信验证码 %s\n", t.GetSession("userId"), MsgCode)
|
|
|
|
+ go func() {
|
|
|
|
+ util.SendSMS("2828060", phoneNum, map[string]string{"code": MsgCode})
|
|
|
|
+ }()
|
|
|
|
+ return true, ""
|
|
|
|
+ }()
|
|
|
|
+ t.ServeJson(map[string]interface{}{
|
|
|
|
+ "success": ok,
|
|
|
|
+ "errMsg": errMsg,
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//提交申请信息
|
|
|
|
+func (t *TrialOrder) SubmitApply() {
|
|
|
|
+ name := t.GetString("name")
|
|
|
|
+ tel := t.GetString("tel")
|
|
|
|
+ code := t.GetString("code")
|
|
|
|
+ company := t.GetString("company")
|
|
|
|
+ job := t.GetString("job")
|
|
|
|
+ ok, errMsg := func() (bool, string) {
|
|
|
|
+ //校验数据
|
|
|
|
+ if !nameReg.MatchString(name) || code == "" || company == "" {
|
|
|
|
+ return false, "输入校验不通过"
|
|
|
|
+ }
|
|
|
|
+ //校验验证码
|
|
|
|
+ lastSend := qutil.Int64All(t.GetSession("subvip_trial_lastSend"))
|
|
|
|
+ if time.Now().Unix()-lastSend > 60*5 {
|
|
|
|
+ return false, "短信验证码已过期"
|
|
|
|
+ }
|
|
|
|
+ code_sess := qutil.ObjToString(t.GetSession("subvip_trial_MsgCode"))
|
|
|
|
+ tel_sess := qutil.ObjToString(t.GetSession("subvip_trial_phoneNum"))
|
|
|
|
+ if code != code_sess || tel != tel_sess {
|
|
|
|
+ log.Println(code, code_sess, tel, tel_sess)
|
|
|
|
+ return false, "短信验证码错误"
|
|
|
|
+ }
|
|
|
|
+ if isExist(tel_sess) {
|
|
|
|
+ return false, "手机号已使用"
|
|
|
|
+ }
|
|
|
|
+ //储存数据
|
|
|
|
+ userId := qutil.ObjToString(t.GetSession("userId"))
|
|
|
|
+ flag := util.MQFW.Save("user_msg", map[string]interface{}{
|
|
|
|
+ "s_userId": userId,
|
|
|
|
+ "s_name": name,
|
|
|
|
+ "s_phone": tel,
|
|
|
|
+ "s_openid": t.GetSession("s_m_openid"),
|
|
|
|
+ "s_company": company,
|
|
|
|
+ "s_job": job,
|
|
|
|
+ "i_time": time.Now().Unix(),
|
|
|
|
+ "s_source": "vipsub_trial",
|
|
|
|
+ })
|
|
|
|
+ if flag == "" {
|
|
|
|
+ return false, "稍后重试"
|
|
|
|
+ }
|
|
|
|
+ go func() {
|
|
|
|
+ //更新user表可试用
|
|
|
|
+ if !util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"o_vipjy.i_trial": 1}}) {
|
|
|
|
+ log.Println("更新使用状态出错", userId)
|
|
|
|
+ }
|
|
|
|
+ }()
|
|
|
|
+ clearTrialSession(t.Session())
|
|
|
|
+ return true, ""
|
|
|
|
+ }()
|
|
|
|
+ t.ServeJson(map[string]interface{}{
|
|
|
|
+ "success": ok,
|
|
|
|
+ "errMsg": errMsg,
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//查询手机号是否存在
|
|
|
|
+func isExist(phone string) bool {
|
|
|
|
+ res, ok := util.MQFW.FindOne("user_msg", bson.M{"s_phone": phone})
|
|
|
|
+ if ok && len(*res) > 0 {
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//清除session
|
|
|
|
+func clearTrialSession(session *httpsession.Session) {
|
|
|
|
+ session.Del("subvip_trial_MsgCode")
|
|
|
|
+ session.Del("subvip_trial_phoneNum")
|
|
|
|
+ session.Del("subvip_trial_lastSend")
|
|
|
|
+ session.Del("subvip_trial_imgCode")
|
|
}
|
|
}
|
|
|
|
|
|
//订单数据展示(支付成功页面)
|
|
//订单数据展示(支付成功页面)
|
|
@@ -60,7 +219,6 @@ func (this *TrialOrder) TrialPay() {
|
|
if len(industry) == 1 { //去掉[""]
|
|
if len(industry) == 1 { //去掉[""]
|
|
industry = []string{}
|
|
industry = []string{}
|
|
}
|
|
}
|
|
- log.Println(area, industry)
|
|
|
|
//插入订单表
|
|
//插入订单表
|
|
mog_id := util.MQFW.Save("subvip_select", map[string]interface{}{
|
|
mog_id := util.MQFW.Save("subvip_select", map[string]interface{}{
|
|
"o_area": area, //地区(对象)
|
|
"o_area": area, //地区(对象)
|