plugin union pay query func
This commit is contained in:
parent
48e7c94e08
commit
a05a638ce8
|
@ -16,9 +16,23 @@ const (
|
|||
CookieValue = "union_pay_cpn"
|
||||
)
|
||||
|
||||
const BaseUri = "https://openapi.alipay.com/gateway.do"
|
||||
|
||||
const (
|
||||
orderMethod = "alipay.user.dtbankcust.channelvoucher.send"
|
||||
queryMethod = "alipay.user.dtbankcust.activityorder.query"
|
||||
)
|
||||
|
||||
type AlipayCpnService struct{}
|
||||
|
||||
func (p *AlipayCpnService) configBaseUri(config *proto.Config) {
|
||||
if config.BaseUri == "" {
|
||||
config.BaseUri = BaseUri
|
||||
}
|
||||
}
|
||||
|
||||
func (p *AlipayCpnService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
|
||||
p.configBaseUri(request.Config)
|
||||
conf, err := transConfig(request.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -27,7 +41,7 @@ func (p *AlipayCpnService) Order(ctx context.Context, request *proto.OrderReques
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param, err := paramReq(conf, poReq)
|
||||
param, err := paramReq(conf, poReq, orderMethod)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -45,7 +59,29 @@ func (p *AlipayCpnService) Order(ctx context.Context, request *proto.OrderReques
|
|||
}
|
||||
|
||||
func (p *AlipayCpnService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
|
||||
return nil, nil
|
||||
p.configBaseUri(request.Config)
|
||||
conf, err := transConfig(request.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
poReq, err := queryReq(request.Order)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
param, err := paramReq(conf, poReq, queryMethod)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
uv, err := req(conf, param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var response po.QueryResp
|
||||
err = requests.URL(request.Config.BaseUri).BodyForm(uv).ToJSON(&response).Fetch(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("请求异常,msg:" + err.Error())
|
||||
}
|
||||
return queryResp(request, response), nil
|
||||
}
|
||||
|
||||
func (p *AlipayCpnService) Notify(_ context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) {
|
||||
|
|
|
@ -8,19 +8,15 @@ import (
|
|||
"testing"
|
||||
)
|
||||
|
||||
var appId = "2021003168695204"
|
||||
var appKey = ""
|
||||
var baseUri = "https://openapi.alipay.com/gateway.do"
|
||||
|
||||
var server = &AlipayCpnService{}
|
||||
|
||||
var config = &proto.Config{
|
||||
AppId: appId,
|
||||
AppKey: appKey,
|
||||
BaseUri: baseUri,
|
||||
AppId: "2021004125622196",
|
||||
AppKey: "",
|
||||
BaseUri: "",
|
||||
NotifyUrl: "",
|
||||
Extra: []byte(`{"prk":"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDAtMuB1mGgbZOETHRlfYefThBO2HjiNcg0kprSgPGQR3gJC6uZ6x2njBrGfLpGsEHjGNnHIjepvbeulD49Tht71kEtKPfsw0LgSgbLDjpxwADctCgnniGHuGmVOeuhuL8hO6JxNt4s+0xPoigmgHFltTKth0Ddc5kqthKmxLx3PJ/JqrzlsELzVkzC+gR/0+epTBTzLUpYzlRt3WhHmxEm8Y9XUk6C1naNXaQNrbrXFzTwnW9MxVj/yJaCoCVcifoVic14lWw3w0cdZ1yM6kcAA9vYAlhIJYc0eg2pAQt/mg/mdseourpa0O01d+2287vKOnOivK0UGqEYsw7d+Q9PAgMBAAECggEBAJ8WostViNNAowAdfhorP8OsVppA68sUS2vbfCU8fjB2UApnsAsppxmi+JfUcJPa/wnUgjV7ciiXjwR5Lci+qsHZZ4U4xTSZHqS7eFA6NtWhhRSvRlcunM/G1qNzZavlMSTmbny4p0LLU3yKikr+zp8AsA3CEzK/NDumhE9ZK53i5WWGwOLQI4yaQoD8XkbFxkWf0yKZiqxj+5UXNnaawfY45ZgDRVtd02hLJQnEYLS4PAt/tUW2I3M+2CJzVcJysry6fd56ZE8JLPVomS3ckS4MsUJkefBTbcJ/idkC5CvnRFqzLjOIOGjDKZqppfn99osilEIhq+UrdmeVZwQEO8ECgYEA+cDxSUjgOkhcU6QlD23B3dmNDWTmJ25RPD55mrhfa6tjInvSiotBwZxwmYKDmBTq/tprf82OjSlR7dQ7oFPSbtde/8tyc/bL/1Jz9/oMB+R2ZxDN3wzCR+rpK3n9YlDv3sR8bYN9q70buTd85SWBk4sdCBb2ZxdFFbn+vAg0ANMCgYEAxYaam+F5IY1/012Y9rikd8IqfZueLGOWOqBUflfsh+ov7Q+xvnJvzk/BLqHU9GvTVCmFK7II1lEFT5tfv8rc6w0y0OOkytx6Ymj/qfcwd8LffKfpRucQSE5i1WyxOvXBZQUZKQSxP0pWrELu9JCE0PPINz+pcFATdH4HV4WoShUCgYARsaSmf347QtMfrdpeTHVWpUoD7+kKVBt3PCnbV0KTWzILyF/zJsiC0fV8Oq3eAWVgptLE3ChEQfAm/Ek5I5cd+S4myyARrSNotEu4/sMJcBsfVCZxrfK5q5/XT64u3/MOgjcafx1RJHWpWpADn/OdI1bsMsxEI3bmgiXU5nPgtwKBgHz/dl3I7L/H7KlUZNVU+Xdz3zHHxevvRYVqKq4dc+h60cNiGCgeART9MZISBVJ73as37zc8ng0KDqNW/tu/Q9hXbN32ATYDGkumiIwFip1vK8CV/bDJzmsDd9X5x5o5JR6JgGeNuaEEqR6v6MnJntMgQoZ7+fzCH92rV3gSc/IVAoGBAK0LkOgsU0Hd9ac0m4yCNPAqt02kSVaq0Q31pzO06/8hrA3+TkCfevKzt0dAwwEpjWHIfLKvJGriRgQSIh2eYloQueM6j0KwNsSkSAXWVaNlA5Twy3cMyYGUauioewksU3a/zhZf6QVsvqC0E5ETxhw/S22PfDnv+y4HzrudQIGo",
|
||||
"npk":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjnsbMbY/KYHhUkVbalbtSMbLFcntTEfqlz+t3bskMUOIvPldsW8U+RQymhjw6AGOQooqMvDqbkWk3kZph9mf56fTbRHYTiyAgNp+yzE9p6DQn3I1k7wT1aaWIX0cn+nJ0n427tYskfDNoG9MojvKLJQjVkU7/CejNy7z9j2BWXU/nPqfavwC/EUQmdx+4aI2IwUX4zOAg5ZbvSbnbBaRVnP9lRVEjMIjfl0LuvBqqvHLEwbQTh2UxlHlK9OWaCQmeD3zPCki7GSugwOXkez61wRIrFluWkpGupcAQRQvjkoxesQQy08ikkEbu5NmiQvybfFny46RBrO3/RnqjKqd/QIDAQAB"}`),
|
||||
Extra: []byte(`{"prk":"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2cF2AxAJP/cQJGPcvzJ5Tt9AQnSzpncTo0sOsge07E9WOi8zIP772lm+ar0cjX9jx8Pf1fJ0hJuzqcsSikC/ZeFWNVmmG4crnwb1NzS/3Ymb22SVKqAjUyjgUkaMQEBRSBAYSTbzwLi9ziggiSvgaIZvUnpQWStcYzhPG91aF2q968vKMd3670b0WwCWSMmWW7dezyqMVikigJCvhSOBfC9A66MciiwtATLpiHBAsRr6IZQ6o9JeH7TPwwLW45QMOXR5VG0xuNj5/8dQmhZGtkckhYEC0v2DrjKkORdfbm4XcvsBsnVhcIVcDu1YkDZHYvhH45r7fUqYfKbgUHH9dAgMBAAECggEBAJUtundxT4bDNYpO3Mk8IvbH5h2/uBrrRDkxJomn0Ckvpb+itvfDkE4oYuf0jVHyrP3hEZCtrfqOzslCwWFAT7Aewq4Iy89cUEND25yDvMYns5QDqYercVU2abcAA3s9+q+51JEg+e7XhTuP0ejgrpEHjFnGtcaoucvxrqBSXXCjJu7l/R/O4gSctTKytTrkZ2vcbaUjVSsDIHE0qtzYinpHlUz8yzxTyhbI2ZHiLiZt3bQVbfPjKiu9H1VLcg4Ty38aP6g1c+nc0aanKiJSjlFWrka2dKB8EySYzt1yqSXHtsFc5BI7lopMTXlQ3f7eZljFt+/QjoGdD3LkRLGsZM0CgYEA74fZQjMeqqGGKxRH1vHkVBQ293VcLZxMh/62VROhWR2JU+UFYmP4zjtu+jnCMAb03kXFoyEJtEShcPoJmW/X5jIR7ukQYYTmlognPOHt4j8n1LP3AxF6m1qhfCPKjX+cbFoYebJtmR4u/pGQQcz6VgsaVTmPLEvBlJaW+C2fBWsCgYEAwvuanPWxHqWhUzGRXQWBOZC4tnS0R43xmnNOPjX0py/X/PwfDvYiMbuV9qRHoHu1dXQ/IfURpOJLp/ibqhTd7TRk6TwVtpnCZ4XJaXZ4wVnIFuH6d78nbEsQODtOwC82OscXvC+foymouM+7HfjXFYh597y+6f3khPQGoTP2+FcCgYBiffWz5tlBSFGm/RvdInHEsNs5PaS9jHtboDzRFtVNk3uYZ5+jKYBxLLchZQaYQQQHMaFmxnr7CQ1pKycvVHHuUcBWALefoco/M5UOz8fFNDrol2eGd3V20/l61iy/qi1j0FgoElpGj8a7Hpe2ttZo8v/M83IPwMbElndVbUzqKQKBgQCSvNlR8JEYWFv9iRs1n1PuJ5zrKw8VnpxJuScUKHTzcU0iBfe1wcRgGyUz1dRV0WPxfceZXZ6msOtxAObdbBDMWBbtdBt/LV4hnIzEgrVEBbZQikZ94ezgUell+DQ+7Ajq2TRimpCQMWTZmPPgDYqImQn5SCGBZWKaMC/hF4NwxwKBgASRF+xP/NUxj3G3TjRHMskFTgtOvzCChZgRXRuvIEd4zEZ1Y29sPSuTHFnJPVPfMDeGmcwPPVDGpMIumRXKJAO6hC9BtnivDnqjtCh16fzoimBeBlaGgg4KWfXT+7BTAPFzlKg4diHoa4Adc4JC+r9Xh++VAMUc3zvH4LWB+Oen",
|
||||
"npk":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5sfDbw6kkHXeOSfr7RbrbkV7xHlNE8c5eXNI3ri+UCQLka9aehlnLhI2M1DkzSWFXvHuo5vHlC6set5j25nv+4AKevY1TgAPTMZQjNA3EMXinvBTZVCZnG6Cc3BN5jvAnt31NyTE9JsR5shFL9O6WTFED/WGUaM95kJfVeA1CwWkXUVV2kd1qU5KPAIHKMWsWiu9mSOBVZGd7NWwqfrZq33tiHmqYQ5LkS2JIno3qXukKm/2HIL+Ri1lw7s1c/xE6XalKPiroojK6zLLtrLa3LEGN833NWASrdGi4moYhAPHPZnhwsMr9FfUEsGSvwqdJlAbCtnIdbx3a6mV+sBRxQIDAQAB"}`),
|
||||
}
|
||||
|
||||
func TestOrder(t *testing.T) {
|
||||
|
@ -51,10 +47,10 @@ func TestQuery(t *testing.T) {
|
|||
request := &proto.QueryRequest{
|
||||
Config: config,
|
||||
Order: &proto.QueryRequest_Order{
|
||||
OrderNo: "240403164049635931",
|
||||
OrderNo: "240403180614988314_80",
|
||||
TradeNo: "",
|
||||
Account: "",
|
||||
Extra: []byte(`{"origDate":"20240704"}`),
|
||||
Extra: []byte(`{"phone_id":"","logon_id":"13691105465","activity_id":"ACT873CCV02108400"}`),
|
||||
},
|
||||
}
|
||||
t.Run("TestQuery", func(t *testing.T) {
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
)
|
||||
|
||||
type Param struct {
|
||||
AppId string `json:"appid" validate:"required"`
|
||||
AppId string `json:"app_id" validate:"required"`
|
||||
Method string `json:"method" validate:"required"`
|
||||
Format string `json:"format" validate:"required"`
|
||||
Charset string `json:"charset" validate:"required"`
|
||||
|
|
|
@ -14,6 +14,11 @@ type QueryReq struct {
|
|||
}
|
||||
|
||||
type QueryResp struct {
|
||||
Data QueryRespData `json:"alipay_user_dtbankcust_activityorder_query_response"`
|
||||
Sign string `json:"sign"`
|
||||
}
|
||||
|
||||
type QueryRespData struct {
|
||||
Code vo.Code `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
SubCode string `json:"subCode"`
|
||||
|
|
|
@ -31,7 +31,7 @@ func transConfig(config *proto.Config) (*Config, error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
func paramReq(config *Config, req po.Req) (*po.Param, error) {
|
||||
func paramReq(config *Config, req po.Req, method string) (*po.Param, error) {
|
||||
if err := req.Validate(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ func paramReq(config *Config, req po.Req) (*po.Param, error) {
|
|||
Timestamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||
Version: vo.Version,
|
||||
AppId: config.Config.AppId,
|
||||
Method: "alipay.user.dtbankcust.channelvoucher.send",
|
||||
Method: method,
|
||||
Format: vo.Format,
|
||||
Charset: vo.Charset,
|
||||
SignType: vo.SignType,
|
||||
|
@ -83,12 +83,40 @@ func orderResp(request *proto.OrderRequest, resp po.OrderResp) *proto.OrderRespo
|
|||
}
|
||||
}
|
||||
|
||||
func queryReq(in *proto.QueryRequest, chNlId string) *po.QueryReq {
|
||||
return nil
|
||||
func queryReq(in *proto.QueryRequest_Order) (*po.QueryReq, error) {
|
||||
type Extra struct {
|
||||
LogonId string `json:"logon_id"`
|
||||
PhoneId string `json:"phone_id"`
|
||||
ActivityID string `json:"activity_id"`
|
||||
}
|
||||
var extra Extra
|
||||
if in.Extra != nil {
|
||||
err := json.Unmarshal(in.Extra, &extra)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("order extra json unmarshal error: %v", err)
|
||||
}
|
||||
}
|
||||
return &po.QueryReq{
|
||||
ActivityOrderId: in.TradeNo,
|
||||
OutBizNo: in.OrderNo,
|
||||
UserId: in.Account,
|
||||
LogonId: extra.LogonId,
|
||||
PhoneId: extra.PhoneId,
|
||||
ActivityID: extra.ActivityID,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func queryResp(request *proto.QueryRequest, resp po.QueryResp) *proto.QueryResponse {
|
||||
return nil
|
||||
data, _ := json.Marshal(resp)
|
||||
return &proto.QueryResponse{
|
||||
Result: &proto.Result{
|
||||
Status: resp.Data.Status.GetOrderStatus(),
|
||||
OrderNo: request.Order.OrderNo,
|
||||
TradeNo: request.Order.TradeNo,
|
||||
Message: resp.Data.Msg,
|
||||
Data: data,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func notifyReq(in *proto.NotifyRequest) *po.Notify {
|
||||
|
|
|
@ -19,7 +19,7 @@ import (
|
|||
func req(config *Config, req *po.Param) (url.Values, error) {
|
||||
var strToBeSigned strings.Builder
|
||||
uv := url.Values{}
|
||||
kvRows := utils.SortStruct(req)
|
||||
kvRows := utils.SortStructJsonTag(req)
|
||||
for _, kv := range kvRows {
|
||||
if kv.Key == "sign" {
|
||||
continue
|
||||
|
|
Loading…
Reference in New Issue