package alipay import ( "bytes" "encoding/json" "fmt" "io" "net/http" "time" ) func Consult(info *ConsultPay) (error, ConsultResult) { var ( err error result ConsultResult ) reqBytes, _ := json.Marshal(&info) err, resBody := post(prefix+consult, reqBytes) if err != nil { return err, result } fmt.Println(string(resBody)) err = json.Unmarshal(resBody, &result) if err != nil { return err, result } return err, result } func CreateOrder(info *CreatePay) (error, OrderDetail) { var ( err error result OrderDetail ) reqBytes, _ := json.Marshal(&info) err, resBody := post(prefix+pay, reqBytes) if err != nil { return err, result } fmt.Println(string(resBody)) err = json.Unmarshal(resBody, &result) if err != nil { return err, result } return err, result } func CaptureOrder(info *CapturePay) (error, CaptureDetail) { var ( err error result CaptureDetail ) reqBytes, _ := json.Marshal(&info) err, resBody := post(prefix+capture, reqBytes) if err != nil { return err, result } fmt.Println(string(resBody)) fmt.Println("AlipayCaptureOrder Result:", string(resBody)) err = json.Unmarshal(resBody, &result) if err != nil { return err, result } return err, result } func InquiryPayment(paymentId string) (error, OrderDetail) { var ( err error result OrderDetail ) reqBytes, _ := json.Marshal(&map[string]string{"paymentId": paymentId}) err, resBody := post(prefix+inquiry, reqBytes) if err != nil { return err, result } fmt.Println(string(resBody)) err = json.Unmarshal(resBody, &result) if err != nil { return err, result } return err, result } func Cancel(paymentId string) (error, CancelDetail) { var ( err error result CancelDetail ) reqBytes, _ := json.Marshal(&map[string]string{"paymentRequestId": paymentId}) err, resBody := post(prefix+cancel, reqBytes) if err != nil { return err, result } fmt.Println(string(resBody)) err = json.Unmarshal(resBody, &result) if err != nil { return err, result } return err, result } func Refund(info *RefundRequest) (error, RefundResult) { var ( err error result RefundResult ) reqBytes, _ := json.Marshal(&info) err, resBody := post(prefix+refund, reqBytes) if err != nil { return err, result } fmt.Println(string(resBody)) err = json.Unmarshal(resBody, &result) if err != nil { return err, result } return err, result } func post(api string, reqBody []byte) (error, []byte) { var ( err error result []byte ) req, err := http.NewRequest(http.MethodPost, baseurl+api, bytes.NewBuffer(reqBody)) if err != nil { return err, result } requestTime := time.Now().Format(time.RFC3339) signStr := sign(api, ClientId, requestTime, string(reqBody)) req.Header.Add("Content-Type", "application/json") req.Header.Add("Client-Id", ClientId) req.Header.Add("Request-Time", requestTime) req.Header.Add("Signature", "algorithm=RSA256,keyVersion=1,signature="+signStr) httpClient := &http.Client{} resp, err := httpClient.Do(req) if err != nil { return err, result } defer resp.Body.Close() result, err = io.ReadAll(resp.Body) return err, result }