|
@@ -24,7 +24,7 @@ func TestWeChatClient_UnifiedOrder(t *testing.T) {
|
|
|
body.Set("nonce_str", GetRandomString(32))
|
|
body.Set("nonce_str", GetRandomString(32))
|
|
|
body.Set("body", "测试支付")
|
|
body.Set("body", "测试支付")
|
|
|
number := GetRandomString(32)
|
|
number := GetRandomString(32)
|
|
|
- log.Println("Number:", number)
|
|
|
|
|
|
|
+ fmt.Println("out_trade_no:", number)
|
|
|
body.Set("out_trade_no", number)
|
|
body.Set("out_trade_no", number)
|
|
|
body.Set("total_fee", 10)
|
|
body.Set("total_fee", 10)
|
|
|
body.Set("spbill_create_ip", "124.77.173.62")
|
|
body.Set("spbill_create_ip", "124.77.173.62")
|
|
@@ -39,6 +39,7 @@ func TestWeChatClient_UnifiedOrder(t *testing.T) {
|
|
|
wxRsp, err := client.UnifiedOrder(body)
|
|
wxRsp, err := client.UnifiedOrder(body)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
fmt.Println("wxRsp:", *wxRsp)
|
|
fmt.Println("wxRsp:", *wxRsp)
|
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
timeStamp := strconv.FormatInt(time.Now().Unix(), 10)
|
|
@@ -67,8 +68,9 @@ func TestWeChatClient_QueryOrder(t *testing.T) {
|
|
|
wxRsp, err := client.QueryOrder(body)
|
|
wxRsp, err := client.QueryOrder(body)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- fmt.Println("Response:", wxRsp)
|
|
|
|
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestWeChatClient_CloseOrder(t *testing.T) {
|
|
func TestWeChatClient_CloseOrder(t *testing.T) {
|
|
@@ -85,12 +87,12 @@ func TestWeChatClient_CloseOrder(t *testing.T) {
|
|
|
body.Set("nonce_str", GetRandomString(32))
|
|
body.Set("nonce_str", GetRandomString(32))
|
|
|
body.Set("sign_type", SignType_MD5)
|
|
body.Set("sign_type", SignType_MD5)
|
|
|
|
|
|
|
|
- //请求订单查询,成功后得到结果
|
|
|
|
|
|
|
+ //请求关闭订单,成功后得到结果
|
|
|
wxRsp, err := client.CloseOrder(body)
|
|
wxRsp, err := client.CloseOrder(body)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
}
|
|
}
|
|
|
- fmt.Println("Response:", wxRsp)
|
|
|
|
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestWeChatClient_Refund(t *testing.T) {
|
|
func TestWeChatClient_Refund(t *testing.T) {
|
|
@@ -120,8 +122,9 @@ func TestWeChatClient_Refund(t *testing.T) {
|
|
|
wxRsp, err := client.Refund(body, Cert_iguiyu+"/apiclient_cert.pem", Cert_iguiyu+"/apiclient_key.pem", Cert_iguiyu+"/apiclient_cert.p12")
|
|
wxRsp, err := client.Refund(body, Cert_iguiyu+"/apiclient_cert.pem", Cert_iguiyu+"/apiclient_key.pem", Cert_iguiyu+"/apiclient_cert.p12")
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- fmt.Println("Response:", wxRsp)
|
|
|
|
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestWeChatClient_QueryRefund(t *testing.T) {
|
|
func TestWeChatClient_QueryRefund(t *testing.T) {
|
|
@@ -142,8 +145,9 @@ func TestWeChatClient_QueryRefund(t *testing.T) {
|
|
|
wxRsp, err := client.QueryRefund(body)
|
|
wxRsp, err := client.QueryRefund(body)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- fmt.Println("Response:", wxRsp)
|
|
|
|
|
|
|
+ fmt.Println("wxRsp:", *wxRsp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestWeChatClient_DownloadBill(t *testing.T) {
|
|
func TestWeChatClient_DownloadBill(t *testing.T) {
|
|
@@ -161,12 +165,13 @@ func TestWeChatClient_DownloadBill(t *testing.T) {
|
|
|
body.Set("bill_date", "20190122")
|
|
body.Set("bill_date", "20190122")
|
|
|
body.Set("bill_type", "ALL")
|
|
body.Set("bill_type", "ALL")
|
|
|
|
|
|
|
|
- //请求订单查询,成功后得到结果
|
|
|
|
|
|
|
+ //请求下载对账单,成功后得到结果(string类型字符串)
|
|
|
wxRsp, err := client.DownloadBill(body)
|
|
wxRsp, err := client.DownloadBill(body)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- fmt.Println("Response:", wxRsp)
|
|
|
|
|
|
|
+ fmt.Println("wxRsp:", wxRsp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestWeChatClient_DownloadFundFlow(t *testing.T) {
|
|
func TestWeChatClient_DownloadFundFlow(t *testing.T) {
|
|
@@ -175,6 +180,7 @@ func TestWeChatClient_DownloadFundFlow(t *testing.T) {
|
|
|
// MchID:商户ID
|
|
// MchID:商户ID
|
|
|
// ApiKey:Key值
|
|
// ApiKey:Key值
|
|
|
// isProd:是否是正式环境
|
|
// isProd:是否是正式环境
|
|
|
|
|
+ // 好像不支持沙箱环境,因为沙箱环境默认需要用MD5签名,但是此接口仅支持HMAC-SHA256签名
|
|
|
client := NewWeChatClient(AppID, MchID_iguiyu, ApiKey_iguiyu, false)
|
|
client := NewWeChatClient(AppID, MchID_iguiyu, ApiKey_iguiyu, false)
|
|
|
|
|
|
|
|
//初始化参数结构体
|
|
//初始化参数结构体
|
|
@@ -184,12 +190,13 @@ func TestWeChatClient_DownloadFundFlow(t *testing.T) {
|
|
|
body.Set("bill_date", "20190122")
|
|
body.Set("bill_date", "20190122")
|
|
|
body.Set("account_type", "Basic")
|
|
body.Set("account_type", "Basic")
|
|
|
|
|
|
|
|
- //请求订单查询,成功后得到结果,沙箱环境下,证书路径参数可传空
|
|
|
|
|
|
|
+ //请求下载资金账单,成功后得到结果,沙箱环境下,证书路径参数可传空
|
|
|
wxRsp, err := client.DownloadFundFlow(body, "", "", "")
|
|
wxRsp, err := client.DownloadFundFlow(body, "", "", "")
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
- fmt.Println("Response:", wxRsp)
|
|
|
|
|
|
|
+ fmt.Println("wxRsp:", wxRsp)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestWeChatClient_BatchQueryComment(t *testing.T) {
|
|
func TestWeChatClient_BatchQueryComment(t *testing.T) {
|
|
@@ -198,6 +205,7 @@ func TestWeChatClient_BatchQueryComment(t *testing.T) {
|
|
|
// MchID:商户ID
|
|
// MchID:商户ID
|
|
|
// ApiKey:Key值
|
|
// ApiKey:Key值
|
|
|
// isProd:是否是正式环境
|
|
// isProd:是否是正式环境
|
|
|
|
|
+ // 好像不支持沙箱环境,因为沙箱环境默认需要用MD5签名,但是此接口仅支持HMAC-SHA256签名
|
|
|
client := NewWeChatClient(AppID, MchID_iguiyu, ApiKey_iguiyu, false)
|
|
client := NewWeChatClient(AppID, MchID_iguiyu, ApiKey_iguiyu, false)
|
|
|
|
|
|
|
|
//初始化参数结构体
|
|
//初始化参数结构体
|
|
@@ -208,10 +216,11 @@ func TestWeChatClient_BatchQueryComment(t *testing.T) {
|
|
|
body.Set("end_time", "20190122174000")
|
|
body.Set("end_time", "20190122174000")
|
|
|
body.Set("offset", "0")
|
|
body.Set("offset", "0")
|
|
|
|
|
|
|
|
- //请求订单查询,成功后得到结果,沙箱环境下,证书路径参数可传空
|
|
|
|
|
|
|
+ //请求拉取订单评价数据,成功后得到结果,沙箱环境下,证书路径参数可传空
|
|
|
wxRsp, err := client.BatchQueryComment(body, "", "", "")
|
|
wxRsp, err := client.BatchQueryComment(body, "", "", "")
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
fmt.Println("Response:", wxRsp)
|
|
fmt.Println("Response:", wxRsp)
|
|
|
}
|
|
}
|
|
@@ -229,7 +238,7 @@ func TestWeChatClient_Micropay(t *testing.T) {
|
|
|
body.Set("nonce_str", GetRandomString(32))
|
|
body.Set("nonce_str", GetRandomString(32))
|
|
|
body.Set("body", "扫用户付款码支付")
|
|
body.Set("body", "扫用户付款码支付")
|
|
|
number := GetRandomString(32)
|
|
number := GetRandomString(32)
|
|
|
- log.Println("Number:", number)
|
|
|
|
|
|
|
+ log.Println("out_trade_no:", number)
|
|
|
body.Set("out_trade_no", number)
|
|
body.Set("out_trade_no", number)
|
|
|
body.Set("total_fee", 1)
|
|
body.Set("total_fee", 1)
|
|
|
body.Set("spbill_create_ip", "124.77.173.62")
|
|
body.Set("spbill_create_ip", "124.77.173.62")
|
|
@@ -240,6 +249,7 @@ func TestWeChatClient_Micropay(t *testing.T) {
|
|
|
wxRsp, err := client.Micropay(body)
|
|
wxRsp, err := client.Micropay(body)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
fmt.Println("Response:", wxRsp)
|
|
fmt.Println("Response:", wxRsp)
|
|
|
}
|
|
}
|
|
@@ -262,6 +272,7 @@ func TestWeChatClient_Reverse(t *testing.T) {
|
|
|
wxRsp, err := client.Reverse(body, "", "", "")
|
|
wxRsp, err := client.Reverse(body, "", "", "")
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("Error:", err)
|
|
fmt.Println("Error:", err)
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
fmt.Println("Response:", wxRsp)
|
|
fmt.Println("Response:", wxRsp)
|
|
|
}
|
|
}
|
|
@@ -276,6 +287,10 @@ func TestMd5(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestCode2Session(t *testing.T) {
|
|
func TestCode2Session(t *testing.T) {
|
|
|
|
|
+ //获取微信用户的OpenId、SessionKey、UnionId
|
|
|
|
|
+ // appId:APPID
|
|
|
|
|
+ // appSecret:AppSecret
|
|
|
|
|
+ // wxCode:小程序调用wx.login 获取的code
|
|
|
userIdRsp, err := Code2Session(AppID, APPSecret, "011EZg6p0VO47n1p2W4p0mle6p0EZg6u")
|
|
userIdRsp, err := Code2Session(AppID, APPSecret, "011EZg6p0VO47n1p2W4p0mle6p0EZg6u")
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
fmt.Println("err:", err)
|
|
@@ -290,6 +305,9 @@ func TestCode2Session(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestGetAccessToken(t *testing.T) {
|
|
func TestGetAccessToken(t *testing.T) {
|
|
|
|
|
+ //获取小程序全局唯一后台接口调用凭据(AccessToken:157字符)
|
|
|
|
|
+ // appId:APPID
|
|
|
|
|
+ // appSecret:AppSecret
|
|
|
rsp, err := GetAccessToken(AppID, APPSecret)
|
|
rsp, err := GetAccessToken(AppID, APPSecret)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
fmt.Println("err:", err)
|
|
@@ -303,6 +321,10 @@ func TestGetAccessToken(t *testing.T) {
|
|
|
|
|
|
|
|
func TestGetPaidUnionId(t *testing.T) {
|
|
func TestGetPaidUnionId(t *testing.T) {
|
|
|
accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
|
|
accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
|
|
|
|
|
+ //用户支付完成后,获取该用户的 UnionId,无需用户授权。
|
|
|
|
|
+ // accessToken:接口调用凭据
|
|
|
|
|
+ // openId:用户的OpenID
|
|
|
|
|
+ // transactionId:微信支付订单号
|
|
|
rsp, err := GetPaidUnionId(accessToken, "o0Df70MSI4Ygv2KQ2cLnoMN5CXI8", "4200000326201905256499385970")
|
|
rsp, err := GetPaidUnionId(accessToken, "o0Df70MSI4Ygv2KQ2cLnoMN5CXI8", "4200000326201905256499385970")
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
fmt.Println("err:", err)
|
|
@@ -315,12 +337,16 @@ func TestGetPaidUnionId(t *testing.T) {
|
|
|
|
|
|
|
|
func TestGetWeChatUserInfo(t *testing.T) {
|
|
func TestGetWeChatUserInfo(t *testing.T) {
|
|
|
accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
|
|
accessToken := "21_3puo3mxoK6Ry2bR7Dh-qdn41wUP1wClwke8Zhf9a_i39jfWRq9rhNJZZZHaOt_Yad-Gp6u9_46dGW0RbIMz3nANInRI3m-1glvCnGW47v63sjYWV1iyTKOHGwDVxEv78kY-0OfkmkiIveVqAZCZaAAAQTQ"
|
|
|
|
|
+ //获取用户基本信息(UnionID机制)
|
|
|
|
|
+ // accessToken:接口调用凭据
|
|
|
|
|
+ // openId:用户的OpenID
|
|
|
|
|
+ // lang:默认为 zh_CN ,可选填 zh_CN 简体,zh_TW 繁体,en 英语
|
|
|
userInfo, err := GetWeChatUserInfo(accessToken, OpenID)
|
|
userInfo, err := GetWeChatUserInfo(accessToken, OpenID)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
fmt.Println("err:", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- fmt.Println("userInfo:", userInfo)
|
|
|
|
|
|
|
+ fmt.Println("userInfo:", *userInfo)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestDecryptOpenDataToStruct(t *testing.T) {
|
|
func TestDecryptOpenDataToStruct(t *testing.T) {
|
|
@@ -329,6 +355,11 @@ func TestDecryptOpenDataToStruct(t *testing.T) {
|
|
|
session := "lyY4HPQbaOYzZdG+JcYK9w=="
|
|
session := "lyY4HPQbaOYzZdG+JcYK9w=="
|
|
|
|
|
|
|
|
phone := new(WeChatUserPhone)
|
|
phone := new(WeChatUserPhone)
|
|
|
|
|
+ //解密开放数据
|
|
|
|
|
+ // encryptedData:包括敏感数据在内的完整用户信息的加密数据
|
|
|
|
|
+ // iv:加密算法的初始向量
|
|
|
|
|
+ // sessionKey:会话密钥
|
|
|
|
|
+ // beanPtr:需要解析到的结构体指针
|
|
|
err := DecryptOpenDataToStruct(data, iv, session, phone)
|
|
err := DecryptOpenDataToStruct(data, iv, session, phone)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
fmt.Println("err:", err)
|
|
@@ -341,7 +372,13 @@ func TestDecryptOpenDataToStruct(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestGetOpenIdByAuthCode(t *testing.T) {
|
|
func TestGetOpenIdByAuthCode(t *testing.T) {
|
|
|
- openIdRsp, err := GetOpenIdByAuthCode(AppID, MchID_iguiyu, "135127679952609396", ApiKey_iguiyu, GetRandomString(32))
|
|
|
|
|
|
|
+ //授权码查询openid
|
|
|
|
|
+ // appId:APPID
|
|
|
|
|
+ // mchId:商户号
|
|
|
|
|
+ // apiKey:ApiKey
|
|
|
|
|
+ // authCode:用户授权码
|
|
|
|
|
+ // nonceStr:随即字符串
|
|
|
|
|
+ openIdRsp, err := GetOpenIdByAuthCode(AppID, MchID_iguiyu, ApiKey_iguiyu, "135127679952609396", GetRandomString(32))
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
fmt.Println("err:", err)
|
|
fmt.Println("err:", err)
|
|
|
return
|
|
return
|