114 lines
2.8 KiB
Go
114 lines
2.8 KiB
Go
package payment
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// BillQuery 查询对账单
|
|
func (c *Client) BillQuery(date time.Time) (*BillQueryResponse, error) {
|
|
now := time.Now().Format("20060102150405")
|
|
BusiMainId := now + RandomNumber(10)
|
|
|
|
if date.IsZero() {
|
|
date = time.Now().AddDate(0, 0, -1)
|
|
}
|
|
|
|
requestBody := map[string]interface{}{
|
|
"head": map[string]string{
|
|
"partnerTxSriNo": BusiMainId,
|
|
"reqTime": now,
|
|
"method": "ufile.query.commonQuery",
|
|
"version": "1",
|
|
"merchantId": c.cfg.MerchantId,
|
|
"appID": c.cfg.AppID,
|
|
"accessType": "API",
|
|
"reserve": "",
|
|
},
|
|
"body": map[string]interface{}{
|
|
"date": date.Format("20060102"),
|
|
"mchtNo": c.cfg.MchtNo,
|
|
},
|
|
}
|
|
|
|
encryptedReq, err := EncryptRequest(requestBody, c.cfg)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("加密请求失败: %v", err)
|
|
}
|
|
|
|
encryptedBytes, _ := json.Marshal(encryptedReq)
|
|
url := c.cfg.FileHost + c.cfg.MerchantId + ".htm?partnerTxSriNo=" + BusiMainId
|
|
|
|
resp, err := http.Post(url, "application/json", bytes.NewReader(encryptedBytes))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("请求失败: %v", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("读取响应失败: %v", err)
|
|
}
|
|
|
|
responseData, err := c.DecryptResponse(string(body), false)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("解密响应失败: %v", err)
|
|
}
|
|
|
|
var result BillQueryResponse
|
|
if err := json.Unmarshal([]byte(responseData), &result); err != nil {
|
|
return nil, fmt.Errorf("解析响应失败: %v", err)
|
|
}
|
|
|
|
return &result, nil
|
|
}
|
|
|
|
// BillDownload 下载对账单
|
|
func (c *Client) BillDownload(fileId string, date time.Time) ([]byte, error) {
|
|
now := time.Now().Format("20060102150405")
|
|
BusiMainId := now + RandomNumber(10)
|
|
|
|
requestBody := map[string]interface{}{
|
|
"head": map[string]string{
|
|
"partnerTxSriNo": BusiMainId,
|
|
"reqTime": now,
|
|
"method": "ufile.download.commonDownload",
|
|
"version": "1",
|
|
"merchantId": c.cfg.MerchantId,
|
|
"appID": c.cfg.AppID,
|
|
"accessType": "API",
|
|
"reserve": "",
|
|
},
|
|
"body": map[string]interface{}{
|
|
"mchtNo": c.cfg.MchtNo,
|
|
"sm4Key": "",
|
|
"fileId": fileId,
|
|
},
|
|
}
|
|
|
|
encryptedReq, err := EncryptRequest(requestBody, c.cfg)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("加密请求失败: %v", err)
|
|
}
|
|
|
|
encryptedBytes, _ := json.Marshal(encryptedReq)
|
|
url := c.cfg.FileHost + c.cfg.MerchantId + ".htm?partnerTxSriNo=" + BusiMainId
|
|
|
|
resp, err := http.Post(url, "application/json", bytes.NewReader(encryptedBytes))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("请求失败: %v", err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("读取响应失败: %v", err)
|
|
}
|
|
|
|
return body, nil
|
|
}
|