|
|
@@ -1,80 +1,299 @@
|
|
|
package wechat
|
|
|
|
|
|
import (
|
|
|
- "encoding/xml"
|
|
|
"fmt"
|
|
|
+ "os"
|
|
|
+ "strconv"
|
|
|
"testing"
|
|
|
+ "time"
|
|
|
|
|
|
"github.com/iGoogle-ink/gopay"
|
|
|
)
|
|
|
|
|
|
-type Student struct {
|
|
|
- XMLName xml.Name `xml:"xml"`
|
|
|
- Name string `xml:"name,omitempty"`
|
|
|
- Age int `xml:"age,omitempty"`
|
|
|
- Sign string `xml:"sign,omitempty"`
|
|
|
- Phone string `xml:"phone,omitempty"`
|
|
|
+var (
|
|
|
+ client *Client
|
|
|
+ appId = "wxdaa2ab9ef87b5497"
|
|
|
+ mchId = "1368139502"
|
|
|
+ apiKey = "GFDS8j98rewnmgl45wHTt980jg543abc"
|
|
|
+)
|
|
|
+
|
|
|
+func TestMain(m *testing.M) {
|
|
|
+
|
|
|
+ // 初始化微信客户端
|
|
|
+ // appId:应用ID
|
|
|
+ // mchId:商户ID
|
|
|
+ // apiKey:API秘钥值
|
|
|
+ // isProd:是否是正式环境
|
|
|
+ client = NewClient(appId, mchId, apiKey, false)
|
|
|
+
|
|
|
+ // 设置国家,不设置默认就是 China
|
|
|
+ client.SetCountry(China)
|
|
|
+
|
|
|
+ //err := client.AddCertFilePath("", "", "")
|
|
|
+ //if err != nil {
|
|
|
+ // panic(err)
|
|
|
+ //}
|
|
|
+
|
|
|
+ os.Exit(m.Run())
|
|
|
}
|
|
|
|
|
|
-func TestBodyMap_MarshalXML(t *testing.T) {
|
|
|
+func TestClient_UnifiedOrder(t *testing.T) {
|
|
|
+ number := gopay.GetRandomString(32)
|
|
|
+ fmt.Println("out_trade_no:", number)
|
|
|
+ // 初始化参数Map
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("body", "H5支付")
|
|
|
+ bm.Set("out_trade_no", number)
|
|
|
+ bm.Set("total_fee", 1)
|
|
|
+ bm.Set("spbill_create_ip", "127.0.0.1")
|
|
|
+ bm.Set("notify_url", "http://www.gopay.ink")
|
|
|
+ bm.Set("trade_type", TradeType_H5)
|
|
|
+ bm.Set("device_info", "WEB")
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
|
|
|
- //student := new(Student)
|
|
|
- //student.Name = "Jerry"
|
|
|
- //student.Age = 28
|
|
|
- //student.Phone = "18017448610"
|
|
|
- student := make(gopay.BodyMap)
|
|
|
- student.Set("name", "Jerry")
|
|
|
- student.Set("age", 28)
|
|
|
- student.Set("phone", "18017448610")
|
|
|
+ sceneInfo := make(map[string]map[string]string)
|
|
|
+ h5Info := make(map[string]string)
|
|
|
+ h5Info["type"] = "Wap"
|
|
|
+ h5Info["wap_url"] = "http://www.gopay.ink"
|
|
|
+ h5Info["wap_name"] = "H5测试支付"
|
|
|
+ sceneInfo["h5_info"] = h5Info
|
|
|
+ bm.Set("scene_info", sceneInfo)
|
|
|
|
|
|
- marshal, err := xml.Marshal(student)
|
|
|
+ //bm.Set("openid", "o0Df70H2Q0fY8JXh1aFPIRyOBgu8")
|
|
|
+
|
|
|
+ // 正式
|
|
|
+ //sign := gopay.GetWeChatParamSign("wxdaa2ab9ef87b5497", "1368139502", "GFDS8j98rewnmgl45wHTt980jg543abc", body)
|
|
|
+ // 沙箱
|
|
|
+ //sign, _ := gopay.GetWeChatSanBoxParamSign("wxdaa2ab9ef87b5497", "1368139502", "GFDS8j98rewnmgl45wHTt980jg543abc", body)
|
|
|
+ //body.Set("sign", sign)
|
|
|
+
|
|
|
+ // 请求支付下单,成功后得到结果
|
|
|
+ wxRsp, err := client.UnifiedOrder(bm)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
+ //fmt.Println("wxRsp.MwebUrl:", wxRsp.MwebUrl)
|
|
|
+
|
|
|
+ timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
|
+
|
|
|
+ // 获取小程序支付需要的paySign
|
|
|
+ //pac := "prepay_id=" + wxRsp.PrepayId
|
|
|
+ //paySign := GetMiniPaySign(appId, wxRsp.NonceStr, pac, SignType_MD5, timeStamp, apiKey)
|
|
|
+ //fmt.Println("paySign:", paySign)
|
|
|
+
|
|
|
+ // 获取H5支付需要的paySign
|
|
|
+ pac := "prepay_id=" + wxRsp.PrepayId
|
|
|
+ paySign := GetH5PaySign(appId, wxRsp.NonceStr, pac, SignType_MD5, timeStamp, apiKey)
|
|
|
+ fmt.Println("paySign:", paySign)
|
|
|
+
|
|
|
+ // 获取小程序需要的paySign
|
|
|
+ //paySign := GetAppPaySign(appId,"partnerid", wxRsp.NonceStr, wxRsp.PrepayId, SignType_MD5, timeStamp, apiKey)
|
|
|
+ //fmt.Println("paySign:", paySign)
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_QueryOrder(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("out_trade_no", "MfZC2segKxh0bnJSELbvKNeH3d9oWvvQ")
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
+
|
|
|
+ // 请求订单查询,成功后得到结果
|
|
|
+ wxRsp, err := client.QueryOrder(bm)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_CloseOrder(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("out_trade_no", "MfZC2segKxh0bnJSELbvKNeH3d9oWvvQ")
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
+
|
|
|
+ // 请求关闭订单,成功后得到结果
|
|
|
+ wxRsp, err := client.CloseOrder(bm)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_Micropay(t *testing.T) {
|
|
|
+ number := gopay.GetRandomString(32)
|
|
|
+ fmt.Println("out_trade_no:", number)
|
|
|
+ // 初始化参数Map
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("body", "扫用户付款码支付")
|
|
|
+ bm.Set("out_trade_no", number)
|
|
|
+ bm.Set("total_fee", 1)
|
|
|
+ bm.Set("spbill_create_ip", "127.0.0.1")
|
|
|
+ bm.Set("auth_code", "134622817080551492")
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
+
|
|
|
+ // 请求支付,成功后得到结果
|
|
|
+ wxRsp, err := client.Micropay(bm)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("Response:", *wxRsp)
|
|
|
+
|
|
|
+ ok, err := VerifySign(apiKey, SignType_MD5, wxRsp)
|
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
|
}
|
|
|
+ fmt.Println("同步验签结果:", ok)
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_Refund(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("out_trade_no", "QRcTBTbJLoDrWSW9FtpSFlgWhft2QbaY")
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
+ s := gopay.GetRandomString(64)
|
|
|
+ fmt.Println("out_refund_no:", s)
|
|
|
+ bm.Set("out_refund_no", s)
|
|
|
+ bm.Set("total_fee", 101)
|
|
|
+ bm.Set("refund_fee", 101)
|
|
|
+ bm.Set("notify_url", "https://www.gopay.ink")
|
|
|
+
|
|
|
+ // 请求申请退款(沙箱环境下,证书路径参数可传空)
|
|
|
+ // body:参数Body
|
|
|
+ // certFilePath:cert证书路径
|
|
|
+ // keyFilePath:Key证书路径
|
|
|
+ // pkcs12FilePath:p12证书路径
|
|
|
+ wxRsp, err := client.Refund(bm, "", "", "")
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
+}
|
|
|
|
|
|
- fmt.Println("marshal:", string(marshal))
|
|
|
+func TestClient_QueryRefund(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("out_trade_no", "97HiM5j6kGmM2fk7fYMc8MgKhPnEQ5Rk")
|
|
|
+ //bm.Set("out_refund_no", "vk4264I1UQ3Hm3E4AKsavK8npylGSgQA092f9ckUxp8A2gXmnsLEdsupURVTcaC7")
|
|
|
+ //bm.Set("transaction_id", "97HiM5j6kGmM2fk7fYMc8MgKhPnEQ5Rk")
|
|
|
+ //bm.Set("refund_id", "97HiM5j6kGmM2fk7fYMc8MgKhPnEQ5Rk")
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
|
|
|
+ // 请求申请退款
|
|
|
+ wxRsp, err := client.QueryRefund(bm)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_Reverse(t *testing.T) {
|
|
|
+ // 初始化参数Map
|
|
|
bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("out_trade_no", "6aDCor1nUcAihrV5JBlI09tLvXbUp02B")
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
|
|
|
- err = xml.Unmarshal(marshal, &bm)
|
|
|
+ // 请求撤销订单,成功后得到结果,沙箱环境下,证书路径参数可传空
|
|
|
+ wxRsp, err := client.Reverse(bm, "", "", "")
|
|
|
if err != nil {
|
|
|
- fmt.Println("err2:", err)
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
}
|
|
|
- fmt.Println("bm:", bm)
|
|
|
+ fmt.Println("Response:", wxRsp)
|
|
|
+}
|
|
|
|
|
|
- //maps := make(BodyMap)
|
|
|
- //maps.Set("name", "jerry")
|
|
|
- //maps.Set("age", 28)
|
|
|
- //maps.Set("phone", "13212345678")
|
|
|
- //
|
|
|
- //bytes, err := xml.Marshal(&maps)
|
|
|
- //if err != nil {
|
|
|
- // fmt.Println("err:", err)
|
|
|
- //}
|
|
|
- //fmt.Println("ssss:", string(bytes))
|
|
|
+func TestClient_Transfer(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("partner_trade_no", gopay.GetRandomString(32))
|
|
|
+ bm.Set("openid", "o0Df70H2Q0fY8JXh1aFPIRyOBgu8")
|
|
|
+ bm.Set("check_name", "FORCE_CHECK") // NO_CHECK:不校验真实姓名 , FORCE_CHECK:强校验真实姓名
|
|
|
+ bm.Set("re_user_name", "付明明") // 收款用户真实姓名。 如果check_name设置为FORCE_CHECK,则必填用户真实姓名
|
|
|
+ bm.Set("amount", 30) // 企业付款金额,单位为分
|
|
|
+ bm.Set("desc", "测试转账") // 企业付款备注,必填。注意:备注中的敏感词会被转成字符*
|
|
|
+ bm.Set("spbill_create_ip", "127.0.0.1")
|
|
|
+
|
|
|
+ // 企业向微信用户个人付款(不支持沙箱环境)
|
|
|
+ // body:参数Body
|
|
|
+ // certFilePath:cert证书路径
|
|
|
+ // keyFilePath:Key证书路径
|
|
|
+ // pkcs12FilePath:p12证书路径
|
|
|
+ wxRsp, err := client.Transfer(bm, "", "", "")
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
}
|
|
|
|
|
|
-func TestVerifySign(t *testing.T) {
|
|
|
- student := new(Student)
|
|
|
- student.Name = "Jerry"
|
|
|
- student.Age = 1
|
|
|
- student.Sign = "544E55ED43B787B945FF0BF8344A4D69"
|
|
|
- student.Phone = "18017448610"
|
|
|
+func TestClient_DownloadBill(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("sign_type", SignType_MD5)
|
|
|
+ bm.Set("bill_date", "20190722")
|
|
|
+ bm.Set("bill_type", "ALL")
|
|
|
|
|
|
- maps := make(gopay.BodyMap)
|
|
|
- maps["name"] = "Jerry"
|
|
|
- maps["age"] = 1
|
|
|
- maps["sign"] = "544E55ED43B787B945FF0BF8344A4D69"
|
|
|
- maps["phone"] = "18017448610"
|
|
|
+ // 请求下载对账单,成功后得到结果(string类型字符串)
|
|
|
+ wxRsp, err := client.DownloadBill(bm)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", wxRsp)
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_DownloadFundFlow(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("sign_type", SignType_HMAC_SHA256)
|
|
|
+ bm.Set("bill_date", "20190122")
|
|
|
+ bm.Set("account_type", "Basic")
|
|
|
+
|
|
|
+ // 请求下载资金账单,成功后得到结果,沙箱环境下,证书路径参数可传空
|
|
|
+ wxRsp, err := client.DownloadFundFlow(bm, "", "", "")
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println("wxRsp:", wxRsp)
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_BatchQueryComment(t *testing.T) {
|
|
|
+ // 初始化参数结构体
|
|
|
+ bm := make(gopay.BodyMap)
|
|
|
+ bm.Set("nonce_str", gopay.GetRandomString(32))
|
|
|
+ bm.Set("sign_type", SignType_HMAC_SHA256)
|
|
|
+ bm.Set("begin_time", "20190120000000")
|
|
|
+ bm.Set("end_time", "20190122174000")
|
|
|
+ bm.Set("offset", "0")
|
|
|
|
|
|
- ok, err := VerifySign("ABCDEFG", "MD5", student)
|
|
|
+ // 请求拉取订单评价数据,成功后得到结果,沙箱环境下,证书路径参数可传空
|
|
|
+ wxRsp, err := client.BatchQueryComment(bm, "", "", "")
|
|
|
if err != nil {
|
|
|
- fmt.Println("errrrr:", err)
|
|
|
+ fmt.Println("Error:", err)
|
|
|
return
|
|
|
}
|
|
|
- fmt.Println("ok:", ok)
|
|
|
+ fmt.Println("wxRsp:", wxRsp)
|
|
|
}
|
|
|
|
|
|
+// =======================
|
|
|
+
|
|
|
func TestDecryptOpenDataToStruct(t *testing.T) {
|
|
|
data := "Kf3TdPbzEmhWMuPKtlKxIWDkijhn402w1bxoHL4kLdcKr6jT1jNcIhvDJfjXmJcgDWLjmBiIGJ5acUuSvxLws3WgAkERmtTuiCG10CKLsJiR+AXVk7B2TUQzsq88YVilDz/YAN3647REE7glGmeBPfvUmdbfDzhL9BzvEiuRhABuCYyTMz4iaM8hFjbLB1caaeoOlykYAFMWC5pZi9P8uw=="
|
|
|
iv := "Cds8j3VYoGvnTp1BrjXdJg=="
|
|
|
@@ -146,28 +365,6 @@ func TestDecryptRefundNotifyReqInfo(t *testing.T) {
|
|
|
fmt.Println("refundNotify:", *refundNotify)
|
|
|
}
|
|
|
|
|
|
-func TestBodyMap_Set_Get(t *testing.T) {
|
|
|
- bm := make(gopay.BodyMap)
|
|
|
- sceneInfo := make(map[string]map[string]string)
|
|
|
- h5Info := make(map[string]string)
|
|
|
- h5Info["type"] = "Wap"
|
|
|
- h5Info["wap_url"] = "http://www.gopay.ink"
|
|
|
- h5Info["wap_name"] = "H5测试支付"
|
|
|
- sceneInfo["h5_info"] = h5Info
|
|
|
- bm.Set("scene_info", sceneInfo)
|
|
|
- fmt.Println("Get1:", bm.Get("scene_info"))
|
|
|
-
|
|
|
- bm.Set("student", &Student{
|
|
|
- Name: "Jerry",
|
|
|
- Age: 26,
|
|
|
- Sign: "123465",
|
|
|
- Phone: "123654987",
|
|
|
- })
|
|
|
-
|
|
|
- fmt.Println("Get2:", bm.Get("student"))
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
func TestGetAppletAccessToken(t *testing.T) {
|
|
|
token, err := GetAppletAccessToken("wxdaa2ab9ef87b5497", "AppSecret")
|
|
|
if err != nil {
|