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