mirror of
https://gitlab.52pay.top/go/easygoadmin.git
synced 2025-09-26 22:47:58 +08:00
312 lines
7.6 KiB
Go
312 lines
7.6 KiB
Go
/**
|
||
* 支付工具类
|
||
* @author
|
||
* @since 2021/8/12
|
||
* @File : pay
|
||
*/
|
||
package utils
|
||
|
||
import (
|
||
"bytes"
|
||
"encoding/json"
|
||
"fmt"
|
||
"io/ioutil"
|
||
"net"
|
||
"net/http"
|
||
url2 "net/url"
|
||
"time"
|
||
)
|
||
|
||
var SelfNetTransport *http.Transport
|
||
var HttpClient *http.Client
|
||
|
||
func init() {
|
||
SelfNetTransport = &http.Transport{
|
||
DialContext: (&net.Dialer{
|
||
Timeout: 20 * time.Second,
|
||
KeepAlive: 50 * time.Second,
|
||
}).DialContext,
|
||
MaxIdleConns: 5000,
|
||
MaxIdleConnsPerHost: 20, //每个host最大空闲连接
|
||
IdleConnTimeout: 50 * time.Second,
|
||
TLSHandshakeTimeout: 50 * time.Second,
|
||
ResponseHeaderTimeout: time.Second * time.Duration(10), //数据收发10秒超时
|
||
//DisableKeepAlives: true,
|
||
//ExpectContinueTimeout: 1 * time.Second,
|
||
}
|
||
HttpClient = &http.Client{
|
||
Timeout: 10 * time.Second,
|
||
Transport: SelfNetTransport,
|
||
}
|
||
}
|
||
|
||
// 1、测试post请求 form
|
||
func PostReq(reqMap map[string]interface{}, url string) (string, bool) {
|
||
|
||
data := make(url2.Values)
|
||
for index, item := range reqMap {
|
||
str, _ := item.(string)
|
||
data[index] = []string{str}
|
||
}
|
||
|
||
res2, err2 := http.PostForm(url, data)
|
||
|
||
if err2 != nil {
|
||
fmt.Println("TestPostReq http.NewRequest err:", err2)
|
||
return "", false
|
||
}
|
||
|
||
defer res2.Body.Close()
|
||
|
||
respBody, err := ioutil.ReadAll(res2.Body)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
rsp := make(map[string]interface{})
|
||
err = json.Unmarshal(respBody, &rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
// 最后经过字段筛选后,再序列化成json格式即可
|
||
result, err := json.Marshal(rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
|
||
return "", false
|
||
}
|
||
return string(result), false
|
||
}
|
||
func PostReqV2(reqMap map[string]string, url string) (string, bool) {
|
||
|
||
data := make(url2.Values)
|
||
for index, item := range reqMap {
|
||
str := item
|
||
data[index] = []string{str}
|
||
}
|
||
|
||
res2, err2 := http.PostForm(url, data)
|
||
|
||
if err2 != nil {
|
||
fmt.Println("TestPostReq http.NewRequest err:", err2)
|
||
return "", false
|
||
}
|
||
|
||
defer res2.Body.Close()
|
||
|
||
respBody, err := ioutil.ReadAll(res2.Body)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
rsp := make(map[string]interface{})
|
||
err = json.Unmarshal(respBody, &rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
// 最后经过字段筛选后,再序列化成json格式即可
|
||
result, err := json.Marshal(rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
|
||
return "", false
|
||
}
|
||
return string(result), true
|
||
}
|
||
|
||
func PostReqJson(reqMap map[string]interface{}, url string) (string, bool) {
|
||
|
||
body, err := json.Marshal(reqMap)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marshal err:", err)
|
||
return "", false
|
||
}
|
||
|
||
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
|
||
if err != nil {
|
||
fmt.Println("TestPostReq http.NewRequest err:", err)
|
||
return "", false
|
||
}
|
||
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
|
||
resp, err := HttpClient.Do(req)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq http.DefaultClient.Do() err: ", err)
|
||
return "", false
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
respBody, err := ioutil.ReadAll(resp.Body)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
rsp := make(map[string]interface{})
|
||
err = json.Unmarshal(respBody, &rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
// 最后经过字段筛选后,再序列化成json格式即可
|
||
result, err := json.Marshal(rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
|
||
return "", false
|
||
}
|
||
return string(result), true
|
||
}
|
||
|
||
func PostReqJsonV2(reqMap map[string]string, url string) (string, bool) {
|
||
|
||
body, err := json.Marshal(reqMap)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marshal err:", err)
|
||
return "", false
|
||
}
|
||
|
||
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
|
||
if err != nil {
|
||
fmt.Println("TestPostReq http.NewRequest err:", err)
|
||
return "", false
|
||
}
|
||
|
||
req.Header.Set("Content-Type", "application/json")
|
||
|
||
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
|
||
resp, err := HttpClient.Do(req)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq http.DefaultClient.Do() err: ", err)
|
||
return "", false
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
respBody, err := ioutil.ReadAll(resp.Body)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
rsp := make(map[string]interface{})
|
||
err = json.Unmarshal(respBody, &rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
// 最后经过字段筛选后,再序列化成json格式即可
|
||
result, err := json.Marshal(rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
|
||
return "", false
|
||
}
|
||
return string(result), true
|
||
}
|
||
|
||
type Rsp struct {
|
||
// Code int `json:"code"` // 比如这里仅需要rsp字段(视具体情况而定),那Rsp结构体不解析code字段即可~
|
||
Rsp string `json:"rsp"`
|
||
}
|
||
|
||
func GetReq(url string) (string, bool) {
|
||
|
||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||
if err != nil {
|
||
return "TestGetReq http.NewRequest err:" + err.Error(), false
|
||
}
|
||
|
||
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
|
||
resp, err := HttpClient.Do(req)
|
||
if err != nil {
|
||
return "TestGetReq http.DefaultClient.Do() err: " + err.Error(), false
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
respBody, err := ioutil.ReadAll(resp.Body)
|
||
if err != nil {
|
||
return "TestGetReq ioutil.ReadAll() err: " + err.Error(), false
|
||
}
|
||
// fmt.Println("respBody: ", string(respBody))
|
||
|
||
rsp := make(map[string]interface{})
|
||
err = json.Unmarshal(respBody, &rsp)
|
||
if err != nil {
|
||
return "TestGetReq json.Unmarshal() err: " + err.Error(), false
|
||
}
|
||
|
||
// 最后经过字段筛选后,再序列化成json格式即可(比如这里仅需要rsp字段(视具体情况而定),那Rsp结构体不解析code字段即可~)
|
||
result, err := json.Marshal(rsp)
|
||
if err != nil {
|
||
return "TestGetReq json.Marrshal() err2: " + err.Error(), false
|
||
}
|
||
return string(result), true
|
||
}
|
||
|
||
func GetUrl(url string, data map[string]string) string {
|
||
v := url2.Values{}
|
||
|
||
for key, val := range data {
|
||
v.Add(key, val)
|
||
}
|
||
|
||
url = url + v.Encode()
|
||
|
||
return url
|
||
}
|
||
|
||
func PostReqJsonHeader(reqMap map[string]string, url string, header map[string]string) (string, bool) {
|
||
|
||
body, err := json.Marshal(reqMap)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marshal err:", err)
|
||
return "", false
|
||
}
|
||
|
||
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
|
||
if err != nil {
|
||
fmt.Println("TestPostReq http.NewRequest err:", err)
|
||
return "", false
|
||
}
|
||
|
||
req.Header.Set("Content-Type", "application/json")
|
||
for index, item := range header {
|
||
req.Header.Set(index, item)
|
||
}
|
||
|
||
//client := &http.Client{Timeout: 5 * time.Second} // 设置请求超时时长5s
|
||
resp, err := HttpClient.Do(req)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq http.DefaultClient.Do() err: ", err)
|
||
return "", false
|
||
}
|
||
defer resp.Body.Close()
|
||
|
||
respBody, err := ioutil.ReadAll(resp.Body)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq ioutil.ReadAll() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
rsp := make(map[string]interface{})
|
||
err = json.Unmarshal(respBody, &rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Unmarshal() err: ", err)
|
||
return "", false
|
||
}
|
||
|
||
// 最后经过字段筛选后,再序列化成json格式即可
|
||
result, err := json.Marshal(rsp)
|
||
if err != nil {
|
||
fmt.Println("TestPostReq json.Marrshal() err2: ", err)
|
||
return "", false
|
||
}
|
||
return string(result), true
|
||
}
|