-
Notifications
You must be signed in to change notification settings - Fork 0
/
base.go
92 lines (80 loc) · 2.69 KB
/
base.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
* Created by GoLand.
* User: 姜伟
* Date: 2019/12/27 0027
* Time: 19:48
*/
package alipay
import (
"crypto/tls"
"net/url"
"regexp"
"strings"
"time"
"github.com/a07061625/gompf/mpf"
"github.com/a07061625/gompf/mpf/api"
"github.com/a07061625/gompf/mpf/mpconstant/errorcode"
"github.com/a07061625/gompf/mpf/mpconstant/project"
"github.com/a07061625/gompf/mpf/mperr"
"github.com/valyala/fasthttp"
)
type BaseAliPay struct {
api.APIOuter
respTag string // 响应标识
BizContent map[string]interface{} // 业务请求参数集合
urlNotify string // 主动通知地址
urlReturnBase string // 跳转基础url地址
}
func (ap *BaseAliPay) SetMethod(method string) {
ap.ReqData["method"] = method
ap.respTag = strings.Replace(method, ".", "_", -1) + "_response"
}
func (ap *BaseAliPay) GetRespTag() string {
return ap.respTag
}
func (ap *BaseAliPay) SetUrlNotify(notifyFlag bool) {
if notifyFlag {
ap.ReqData["notify_url"] = ap.urlNotify
} else {
delete(ap.ReqData, "notify_url")
}
}
func (ap *BaseAliPay) SetUrlReturn(urlReturn string) {
match, _ := regexp.MatchString(project.RegexURLHTTP, urlReturn)
if match {
ap.ReqData["return_url"] = ap.urlReturnBase + url.QueryEscape(urlReturn)
} else {
panic(mperr.NewAliPay(errorcode.AliPayParam, "同步通知地址不合法", nil))
}
}
func (ap *BaseAliPay) GetRequest() (*fasthttp.Client, *fasthttp.Request) {
ap.ReqData["biz_content"] = mpf.JSONMarshal(ap.BizContent)
delete(ap.ReqData, "sign")
sign := NewUtil().CreateSign(ap.ReqData, ap.ReqData["sign_type"])
ap.ReqData["sign"] = sign
reqBody := mpf.HTTPCreateParams(ap.ReqData, "none", 1)
client := &fasthttp.Client{}
client.TLSConfig = &tls.Config{InsecureSkipVerify: true}
req := fasthttp.AcquireRequest()
req.SetBody([]byte(reqBody))
req.Header.SetRequestURI(UrlGateWay)
req.Header.SetContentType(project.HTTPContentTypeForm)
req.Header.SetMethod(fasthttp.MethodPost)
mpf.HTTPAddReqHeader(req, ap.ReqHeader)
return client, req
}
func NewBase(appId string) BaseAliPay {
now := time.Now()
conf := NewConfig().GetAccount(appId)
ap := BaseAliPay{api.NewAPIOuter(), "", make(map[string]interface{}), "", ""}
ap.urlNotify = conf.GetUrlNotify()
ap.urlReturnBase = conf.GetUrlReturn()
ap.ReqData["app_id"] = appId
ap.ReqData["format"] = "json"
ap.ReqData["charset"] = "utf-8"
ap.ReqData["sign_type"] = "RSA2"
ap.ReqData["timestamp"] = now.Format("2006-01-02 03:04:05")
ap.ReqData["version"] = "1.0"
ap.ReqHeader["Expect"] = ""
return ap
}