main
parent
744b92c086
commit
750b1601aa
@ -0,0 +1,111 @@
|
||||
package alipay
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"gold-shop/errors"
|
||||
"gold-shop/global"
|
||||
"gold-shop/utils"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var AlipayApi alipayApi = alipayApi{}
|
||||
|
||||
type alipayApi struct {
|
||||
}
|
||||
|
||||
func (api alipayApi) GetAuthToken(code string) (*AuthTokenResult, error) {
|
||||
|
||||
commonParam := api.buildCommonParam("alipay.system.oauth.token")
|
||||
param := AuthTokenParam{}
|
||||
param.CommonParam = commonParam
|
||||
param.Code = code
|
||||
param.GrantType = "authorization_code"
|
||||
|
||||
p, err := utils.StructToURLValues(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sign, err := api.sign(p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
p.Set("sign", sign)
|
||||
|
||||
body, err := api.post(p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := AuthTokenResult{}
|
||||
err = json.Unmarshal(body, &result)
|
||||
fmt.Println(result)
|
||||
if err != nil {
|
||||
return nil, errors.NewBusinessError("数据解析错误")
|
||||
}
|
||||
if result.Code != "10000" {
|
||||
return nil, errors.NewBusinessError(result.Msg)
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
|
||||
func (api alipayApi) buildCommonParam(method string) CommonParam {
|
||||
param := CommonParam{}
|
||||
param.AppID = global.Config.Payment.AliPay.SubAppId
|
||||
param.Method = method
|
||||
param.Format = "JSON"
|
||||
param.Charset = "utf-8"
|
||||
param.SignType = "RSA2"
|
||||
param.Timestamp = time.Now().Format("2006-01-02 15:04:05")
|
||||
param.Version = "1.0"
|
||||
return param
|
||||
}
|
||||
|
||||
func (api *alipayApi) sign(params url.Values) (string, error) {
|
||||
params.Del("sign")
|
||||
for key, value := range params {
|
||||
if len(value) == 0 || value[0] == "" {
|
||||
params.Del(key)
|
||||
}
|
||||
}
|
||||
signStr, err := url.QueryUnescape(params.Encode())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
fmt.Println("signStr: " + signStr)
|
||||
return utils.RSASign([]byte(signStr), global.Config.Payment.AliPay.SubPriPemFile)
|
||||
}
|
||||
|
||||
func (alipayApi) post(data url.Values) ([]byte, error) {
|
||||
client := &http.Client{}
|
||||
body := strings.NewReader(data.Encode())
|
||||
request, err := http.NewRequest("POST", "https://openapi.alipay.com/gateway.do", body)
|
||||
request.Header.Set("content-type", "application/x-www-form-urlencoded")
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.NewBusinessError("请求错误")
|
||||
}
|
||||
response, err := client.Do(request)
|
||||
|
||||
defer func(Body io.ReadCloser) {
|
||||
err := Body.Close()
|
||||
if err != nil {
|
||||
|
||||
}
|
||||
}(response.Body)
|
||||
|
||||
bodyBytes, err := io.ReadAll(response.Body)
|
||||
|
||||
fmt.Println(string(bodyBytes))
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.NewBusinessError("返回内容错误")
|
||||
}
|
||||
|
||||
return bodyBytes, nil
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package alipay
|
||||
|
||||
type AuthTokenParam struct {
|
||||
CommonParam
|
||||
Code string `json:"code"`
|
||||
GrantType string `json:"grant_type"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package alipay
|
||||
|
||||
type AuthTokenResult struct {
|
||||
CommonResult
|
||||
AccessToken string `json:"access_token"`
|
||||
ExpiresIn string `json:"expires_in"`
|
||||
RefreshToken string `json:"refresh_token"`
|
||||
ReExpiresIn string `json:"re_expires_in"`
|
||||
OpenID string `json:"open_id"`
|
||||
UserID string `json:"user_id"`
|
||||
AuthStart string `json:"auth_start"`
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package alipay
|
||||
|
||||
type CommonParam struct {
|
||||
AppID string `json:"app_id"`
|
||||
Method string `json:"method"`
|
||||
Format string `json:"format"`
|
||||
Charset string `json:"charset"`
|
||||
SignType string `json:"sign_type"`
|
||||
Sign string `json:"sign"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
Version string `json:"version"`
|
||||
AppAuthToken string `json:"app_auth_token"`
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package alipay
|
||||
|
||||
type CommonResult struct {
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
SubCode string `json:"sub_code"`
|
||||
SubMsg string `json:"sub_msg"`
|
||||
Sign string `json:"sign"`
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package payment
|
||||
|
||||
type AliPayParam struct {
|
||||
BuyerId string
|
||||
Amount float64
|
||||
OrderId string
|
||||
NotifyUrl string
|
||||
Remark string
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package payment
|
||||
|
||||
type AliPayResult struct {
|
||||
TradeNo string `json:"trade_no"`
|
||||
OrderID string `json:"orderid"`
|
||||
OrderTime string `json:"order_time"`
|
||||
MchOrderID string `json:"mch_orderid"`
|
||||
Version string `json:"version"`
|
||||
Charset string `json:"charset"`
|
||||
Message string `json:"message"`
|
||||
Status string `json:"status"`
|
||||
SignType string `json:"sign_ype"`
|
||||
Sign string `json:"sign"`
|
||||
}
|
Loading…
Reference in New Issue