You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
72 lines
1.6 KiB
package pay_service
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"encoding/hex"
|
|
"encoding/xml"
|
|
"errors"
|
|
"fmt"
|
|
"github.com/iGoogle-ink/gopay/v2"
|
|
"hudongzhuanjia/libs/wx"
|
|
"strings"
|
|
)
|
|
|
|
func ClientExtend(bm gopay.BodyMap, url string) ([]byte, error) {
|
|
|
|
//bm.Set("appid", wx.Appid)
|
|
//bm.Set("mch_id", wx.Mchid)
|
|
|
|
h := md5.New()
|
|
h.Write([]byte(bm.EncodeWeChatSignParams(wx.ApiKey)))
|
|
bm.Set("sign", strings.ToUpper(hex.EncodeToString(h.Sum(nil))))
|
|
|
|
certP12, err := Asset("cacert/apiclient_cert.p12")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
certPem, err := Asset("cacert/apiclient_cert.pem")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
keyPem, err := Asset("cacert/apiclient_key.pem")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
pkcsPool := x509.NewCertPool()
|
|
pkcsPool.AppendCertsFromPEM(certP12)
|
|
certificate, err := tls.X509KeyPair(certPem, keyPem)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("tls.LoadX509KeyPair:%s", err)
|
|
}
|
|
|
|
tlsConfig := &tls.Config{
|
|
Certificates: []tls.Certificate{certificate},
|
|
RootCAs: pkcsPool,
|
|
InsecureSkipVerify: true}
|
|
|
|
httpClient := gopay.NewHttpClient()
|
|
httpClient.SetTLSConfig(tlsConfig)
|
|
|
|
bs, err := xml.Marshal(bm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res, bs, errs := httpClient.Type(gopay.TypeXML).Post(url).SendString(string(bs)).EndBytes()
|
|
|
|
if len(errs) > 0 {
|
|
return nil, fmt.Errorf("http client return error: %v", errs[0])
|
|
}
|
|
|
|
if res.StatusCode != 200 {
|
|
return nil, fmt.Errorf("HTTP Request Error, StatusCode = %d", res.StatusCode)
|
|
}
|
|
|
|
if strings.Contains(string(bs), "HTML") || strings.Contains(string(bs), "html") {
|
|
return nil, errors.New(string(bs))
|
|
}
|
|
return bs, nil
|
|
}
|