Jerry 6 anni fa
parent
commit
1c9109758d
2 ha cambiato i file con 44 aggiunte e 6 eliminazioni
  1. 23 0
      README.md
  2. 21 6
      alipay_client_test.go

+ 23 - 0
README.md

@@ -51,6 +51,7 @@
 
 ## 支付宝公共API
 
+* gopay.AlipaySystemOauthToken() => 换取授权访问令牌(得到access_token,user_id等信息)
 * gopay.FormatPrivateKey() => 格式化应用私钥
 * gopay.FormatAliPayPublicKey() => 格式化支付宝公钥
 * gopay.ParseAliPayNotifyResult() => 解析并返回支付宝支付异步通知的参数
@@ -75,6 +76,7 @@ $ go get -u github.com/iGoogle-ink/gopay
 
 参考文档:[微信支付文档](https://pay.weixin.qq.com/wiki/doc/api/index.html)
 
+---
 ### 获取微信用户OpenId、UnionId、SessionKey
 
 ```go
@@ -335,6 +337,7 @@ if err != nil {
 }
 fmt.Println("Response:", wxRsp)
 ```
+---
 
 # 支付宝支付
 
@@ -348,6 +351,26 @@ fmt.Println("Response:", wxRsp)
 
 沙箱环境使用说明:[文档地址](https://docs.open.alipay.com/200/105311)
 
+---
+
+### 换取授权访问令牌(得到access_token,user_id等信息)
+
+> 支付宝换取授权访问令牌文档[换取授权访问令牌](https://docs.open.alipay.com/api_9/alipay.system.oauth.token)
+
+```go
+privateKey := "MIIEogIBAAKCAQEAy+CRzKw4krA2RzCDTqg5KJg92XkOY0RN3pW4sYInPqnGtHV7YDHu5nMuxY6un+dLfo91OFOEg+RI+WTOPoM4xJtsOaJwQ1lpjycoeLq1OyetGW5Q8wO+iLWJASaMQM/t/aXR/JHaguycJyqlHSlxANvKKs/tOHx9AhW3LqumaCwz71CDF/+70scYuZG/7wxSjmrbRBswxd1Sz9KHdcdjqT8pmieyPqnM24EKBexHDmQ0ySXvLJJy6eu1dJsPIz+ivX6HEfDXmSmJ71AZVqZyCI1MhK813R5E7XCv5NOtskTe3y8uiIhgGpZSdB77DOyPLcmVayzFVLAQ3AOBDmsY6wIDAQABAoIBAHjsNq31zAw9FcR9orQJlPVd7vlJEt6Pybvmg8hNESfanO+16rpwg2kOEkS8zxgqoJ1tSzJgXu23fgzl3Go5fHcoVDWPAhUAOFre9+M7onh2nPXDd6Hbq6v8OEmFapSaf2b9biHnBHq5Chk08v/r74l501w3PVVOiPqulJrK1oVb+0/YmCvVFpGatBcNaefKUEcA+vekWPL7Yl46k6XeUvRfTwomCD6jpYLUhsAKqZiQJhMGoaLglZvkokQMF/4G78K7FbbVLMM1+JDh8zJ/DDVdY2vHREUcCGhl4mCVQtkzIbpxG++vFg7/g/fDI+PquG22hFILTDdtt2g2fV/4wmkCgYEA6goRQYSiM03y8Tt/M4u1Mm7OWYCksqAsU7rzQllHekIN3WjD41Xrjv6uklsX3sTG1syo7Jr9PGE1xQgjDEIyO8h/3lDQyLyycYnyUPGNNMX8ZjmGwcM51DQ/QfIrY/CXjnnW+MVpmNclAva3L33KXCWjw20VsROV1EA8LCL94BUCgYEA3wH4ANpzo7NqXf+2WlPPMuyRrF0QPIRGlFBNtaKFy0mvoclkREPmK7+N4NIGtMf5JNODS5HkFRgmU4YNdupA2I8lIYpD+TsIobZxGUKUkYzRZYZ1m1ttL69YYvCVz9Xosw/VoQ+RrW0scS5yUKqFMIUOV2R/Imi//c5TdKx6VP8CgYAnJ1ADugC4vI2sNdvt7618pnT3HEJxb8J6r4gKzYzbszlGlURQQAuMfKcP7RVtO1ZYkRyhmLxM4aZxNA9I+boVrlFWDAchzg+8VuunBwIslgLHx0/4EoUWLzd1/OGtco6oU1HXhI9J9pRGjqfO1iiIifN/ujwqx7AFNknayG/YkQKBgD6yNgA/ak12rovYzXKdp14Axn+39k2dPp6J6R8MnyLlB3yruwW6NSbNhtzTD1GZ+wCQepQvYvlPPc8zm+t3tl1r+Rtx3ORf5XBZc3iPkGdPOLubTssrrAnA+U9vph61W+OjqwLJ9sHUNK9pSHhHSIS4k6ycM2YAHyIC9NGTgB0PAoGAJjwd1DgMaQldtWnuXjvohPOo8cQudxXYcs6zVRbx6vtjKe2v7e+eK1SSVrR5qFV9AqxDfGwq8THenRa0LC3vNNplqostuehLhkWCKE7Y75vXMR7N6KU1kdoVWgN4BhXSwuRxmHMQfSY7q3HG3rDGz7mzXo1FVMr/uE4iDGm0IXY="
+//换取授权访问令牌(默认使用utf-8,RSA2)
+//    appId:应用ID
+//    privateKey:应用私钥
+//    grantType:值为 authorization_code 时,代表用code换取;值为 refresh_token 时,代表用refresh_token换取,传空默认code换取
+//    codeOrToken:支付宝授权码或refresh_token
+rsp, err := gopay.AlipaySystemOauthToken("2016091200494382", privateKey, "authorization_code", "06e8961891d647c0ac99bb1cebe7SE69")
+if err != nil {
+	fmt.Println("gopay.AlipaySystemOauthToken:",err)
+	return
+}
+fmt.Println("rsp:", *rsp)
+```
 
 ### 1、支付结果异步通知参数解析;2、验签操作
 

+ 21 - 6
alipay_client_test.go

@@ -37,12 +37,13 @@ func TestAliPayClient_AliPayTradePay(t *testing.T) {
 
 func TestAliPayClient_AliPayTradeCreate(t *testing.T) {
 	//aliPayPublicKey := "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wn1sU/8Q0rYLlZ6sq3enrPZw2ptp6FecHR2bBFLjJ+sKzepROd0bKddgj+Mr1ffr3Ej78mLdWV8IzLfpXUi945DkrQcOUWLY0MHhYVG2jSs/qzFfpzmtut2Cl2TozYpE84zom9ei06u2AXLMBkU6VpznZl+R4qIgnUfByt3Ix5b3h4Cl6gzXMAB1hJrrrCkq+WvWb3Fy0vmk/DUbJEz8i8mQPff2gsHBE1nMPvHVAMw1GMk9ImB4PxucVek4ZbUzVqxZXphaAgUXFK2FSFU+Q+q1SPvHbUsjtIyL+cLA6H/6ybFF9Ffp27Y14AHPw29+243/SpMisbGcj2KD+evBwIDAQAB"
-	privateKey := "MIIEogIBAAKCAQEAy+CRzKw4krA2RzCDTqg5KJg92XkOY0RN3pW4sYInPqnGtHV7YDHu5nMuxY6un+dLfo91OFOEg+RI+WTOPoM4xJtsOaJwQ1lpjycoeLq1OyetGW5Q8wO+iLWJASaMQM/t/aXR/JHaguycJyqlHSlxANvKKs/tOHx9AhW3LqumaCwz71CDF/+70scYuZG/7wxSjmrbRBswxd1Sz9KHdcdjqT8pmieyPqnM24EKBexHDmQ0ySXvLJJy6eu1dJsPIz+ivX6HEfDXmSmJ71AZVqZyCI1MhK813R5E7XCv5NOtskTe3y8uiIhgGpZSdB77DOyPLcmVayzFVLAQ3AOBDmsY6wIDAQABAoIBAHjsNq31zAw9FcR9orQJlPVd7vlJEt6Pybvmg8hNESfanO+16rpwg2kOEkS8zxgqoJ1tSzJgXu23fgzl3Go5fHcoVDWPAhUAOFre9+M7onh2nPXDd6Hbq6v8OEmFapSaf2b9biHnBHq5Chk08v/r74l501w3PVVOiPqulJrK1oVb+0/YmCvVFpGatBcNaefKUEcA+vekWPL7Yl46k6XeUvRfTwomCD6jpYLUhsAKqZiQJhMGoaLglZvkokQMF/4G78K7FbbVLMM1+JDh8zJ/DDVdY2vHREUcCGhl4mCVQtkzIbpxG++vFg7/g/fDI+PquG22hFILTDdtt2g2fV/4wmkCgYEA6goRQYSiM03y8Tt/M4u1Mm7OWYCksqAsU7rzQllHekIN3WjD41Xrjv6uklsX3sTG1syo7Jr9PGE1xQgjDEIyO8h/3lDQyLyycYnyUPGNNMX8ZjmGwcM51DQ/QfIrY/CXjnnW+MVpmNclAva3L33KXCWjw20VsROV1EA8LCL94BUCgYEA3wH4ANpzo7NqXf+2WlPPMuyRrF0QPIRGlFBNtaKFy0mvoclkREPmK7+N4NIGtMf5JNODS5HkFRgmU4YNdupA2I8lIYpD+TsIobZxGUKUkYzRZYZ1m1ttL69YYvCVz9Xosw/VoQ+RrW0scS5yUKqFMIUOV2R/Imi//c5TdKx6VP8CgYAnJ1ADugC4vI2sNdvt7618pnT3HEJxb8J6r4gKzYzbszlGlURQQAuMfKcP7RVtO1ZYkRyhmLxM4aZxNA9I+boVrlFWDAchzg+8VuunBwIslgLHx0/4EoUWLzd1/OGtco6oU1HXhI9J9pRGjqfO1iiIifN/ujwqx7AFNknayG/YkQKBgD6yNgA/ak12rovYzXKdp14Axn+39k2dPp6J6R8MnyLlB3yruwW6NSbNhtzTD1GZ+wCQepQvYvlPPc8zm+t3tl1r+Rtx3ORf5XBZc3iPkGdPOLubTssrrAnA+U9vph61W+OjqwLJ9sHUNK9pSHhHSIS4k6ycM2YAHyIC9NGTgB0PAoGAJjwd1DgMaQldtWnuXjvohPOo8cQudxXYcs6zVRbx6vtjKe2v7e+eK1SSVrR5qFV9AqxDfGwq8THenRa0LC3vNNplqostuehLhkWCKE7Y75vXMR7N6KU1kdoVWgN4BhXSwuRxmHMQfSY7q3HG3rDGz7mzXo1FVMr/uE4iDGm0IXY="
+	//privateKey := "MIIEogIBAAKCAQEAy+CRzKw4krA2RzCDTqg5KJg92XkOY0RN3pW4sYInPqnGtHV7YDHu5nMuxY6un+dLfo91OFOEg+RI+WTOPoM4xJtsOaJwQ1lpjycoeLq1OyetGW5Q8wO+iLWJASaMQM/t/aXR/JHaguycJyqlHSlxANvKKs/tOHx9AhW3LqumaCwz71CDF/+70scYuZG/7wxSjmrbRBswxd1Sz9KHdcdjqT8pmieyPqnM24EKBexHDmQ0ySXvLJJy6eu1dJsPIz+ivX6HEfDXmSmJ71AZVqZyCI1MhK813R5E7XCv5NOtskTe3y8uiIhgGpZSdB77DOyPLcmVayzFVLAQ3AOBDmsY6wIDAQABAoIBAHjsNq31zAw9FcR9orQJlPVd7vlJEt6Pybvmg8hNESfanO+16rpwg2kOEkS8zxgqoJ1tSzJgXu23fgzl3Go5fHcoVDWPAhUAOFre9+M7onh2nPXDd6Hbq6v8OEmFapSaf2b9biHnBHq5Chk08v/r74l501w3PVVOiPqulJrK1oVb+0/YmCvVFpGatBcNaefKUEcA+vekWPL7Yl46k6XeUvRfTwomCD6jpYLUhsAKqZiQJhMGoaLglZvkokQMF/4G78K7FbbVLMM1+JDh8zJ/DDVdY2vHREUcCGhl4mCVQtkzIbpxG++vFg7/g/fDI+PquG22hFILTDdtt2g2fV/4wmkCgYEA6goRQYSiM03y8Tt/M4u1Mm7OWYCksqAsU7rzQllHekIN3WjD41Xrjv6uklsX3sTG1syo7Jr9PGE1xQgjDEIyO8h/3lDQyLyycYnyUPGNNMX8ZjmGwcM51DQ/QfIrY/CXjnnW+MVpmNclAva3L33KXCWjw20VsROV1EA8LCL94BUCgYEA3wH4ANpzo7NqXf+2WlPPMuyRrF0QPIRGlFBNtaKFy0mvoclkREPmK7+N4NIGtMf5JNODS5HkFRgmU4YNdupA2I8lIYpD+TsIobZxGUKUkYzRZYZ1m1ttL69YYvCVz9Xosw/VoQ+RrW0scS5yUKqFMIUOV2R/Imi//c5TdKx6VP8CgYAnJ1ADugC4vI2sNdvt7618pnT3HEJxb8J6r4gKzYzbszlGlURQQAuMfKcP7RVtO1ZYkRyhmLxM4aZxNA9I+boVrlFWDAchzg+8VuunBwIslgLHx0/4EoUWLzd1/OGtco6oU1HXhI9J9pRGjqfO1iiIifN/ujwqx7AFNknayG/YkQKBgD6yNgA/ak12rovYzXKdp14Axn+39k2dPp6J6R8MnyLlB3yruwW6NSbNhtzTD1GZ+wCQepQvYvlPPc8zm+t3tl1r+Rtx3ORf5XBZc3iPkGdPOLubTssrrAnA+U9vph61W+OjqwLJ9sHUNK9pSHhHSIS4k6ycM2YAHyIC9NGTgB0PAoGAJjwd1DgMaQldtWnuXjvohPOo8cQudxXYcs6zVRbx6vtjKe2v7e+eK1SSVrR5qFV9AqxDfGwq8THenRa0LC3vNNplqostuehLhkWCKE7Y75vXMR7N6KU1kdoVWgN4BhXSwuRxmHMQfSY7q3HG3rDGz7mzXo1FVMr/uE4iDGm0IXY="
+	privateKey2 := "MIIEpAIBAAKCAQEA0N6CzO4T6NEgWrlW+mrZYMZSNAQ/vBeaCzo1qT+VYNBbklYWxwyUT4JptswSkupdSZGzKVX8rgTBnIbJXjaL9OuUS4KpkOVtqnW9uaPlei7kh2vHkyzbJS85HG8r4XwrrNGY/o4kp/ur51X5dSNPR+Bd5L/0/SUxztsMS8w2onkKk+VNh95yNQx3ZX0XXDhJGmURHFhuWf3bd0XYGoAsLfuEVj95dKOVUodP6RduGJYd/23CBWQfsapA2SxB/X8/ol/7pCgI9UxYkSm88dFZF5BygBv4Alc77ZP2G05VLRtyaEgvzooXzb7N9QEPWsMD4e7sjuuyhUWXakP78BN7tQIDAQABAoIBAGSqeVwPeqUA9ZkELrlueeo8ay4KxjT/Iw06NtalgHcytI+o0j2JAIn5jr29SU5piiCFClZnzOqJ/E5WYAL6QyX9zHFAPj1Jdjtrl887AMSMiTQDbCKwwcYAJoRfyERatioKsrQtCdm0YDuUojAknndD2b0ADzFaldDeneSCPeq7kHVpAylhLIbzGmE7rGWy1gAnJ5ljza/QMQQkVX7MP852IFEwl+8dYeMK4snfKH4SBWbGgLSkfgemEL3mbHaocl2encFHQYjjFSWabUedOfmf0s81+KytsylKLxzZePAKCpbw7cBzf09wXO7YfFPWP3ORSZtEb6UsJAZBD7Kr1ZkCgYEA9DFdgInepyyFgg4w0ljg7HzRT+2U8xGV/rzO6Yc3HerXKWlhUQlAxq+nLW//MZ4RKRilkQmp9876S2jchATXroU+D620q7RmwN80EPhJC3HuAD/vv13rXJpRLhOElL4eMfbllqN/p7Xu0i4P8qrN/WmyICBN4HQxwiAPacOejNMCgYEA2vfoQpcpfDh+pfFvh1kpZLqEsqNdap9Su/dBmtv0oXDST78Azh4WXskoF0g9MQIkUZDjM3Aaa3qWeVI7p8FW8pk1vC1ktD/3x5K19d/eTJYjw4zaxLSDu/8KXkk8+NjpbBJNiUmidFk8y9n15o98AmLmRx5xYeHosH2Y+W6D4FcCgYEA0F7rbYq3/qkEB7V6PZPv4nyj03NlHYENIEEWwrlJ8/J3xXORwieGKcSrgB9IgJtkA1Bvv3Kiob3xYLXLLbBAJ0C1c4WDXN1krQIJmM107xo5v+bO+tn2w58+1HV9NbuBYptO0BsWDBM4BgueOjE78xjlEXrfWT9tUjwvSs3NFlcCgYBakX2ExYdINQnVU1aBEhT379nhFYcXCc0rp+p/xgiaGdMzXtpTZshz7hnh/2Qn+C3Teu0uomibGfpRNf0stuBiuZIrQk9L6sVuy7TtfOoynUsvn/wArnVqdePw+bP5baamp69gYI+MNjjaTE3UTnbJeeSrd+EHzmvzTA/Q47AyQwKBgQC50qZ0jV1WsNfyvv3YyGmlLiyLFEPZ6aDY+gntgeXJ3fCORy90LOk+4FfkaWdIEGH21+dIx7g7oEa9rTt2foqZnCmWWC3vRlDYsdpRYXz4UOKbHsBocWvSCSOmQ8XgwoDve1MhAz7yOlrHIzX816Ld7QHQdI/d/Z4j1LrMyIWP7A=="
 	//初始化支付宝客户端
 	//    appId:应用ID
 	//    privateKey:应用秘钥
 	//    isProd:是否是正式环境
-	client := NewAliPayClient("2016091200494382", privateKey, false)
+	client := NewAliPayClient("2019071565794663", privateKey2, true)
 	//配置公共参数
 	client.SetCharset("utf-8").
 		SetSignType("RSA2").
@@ -50,8 +51,8 @@ func TestAliPayClient_AliPayTradeCreate(t *testing.T) {
 	//请求参数
 	body := make(BodyMap)
 	body.Set("subject", "创建订单")
-	body.Set("buyer_id", "2088102168654131")
-	body.Set("out_trade_no", "GZ201901301040355706100464")
+	body.Set("buyer_id", "2088802095984694")
+	body.Set("out_trade_no", "GZ201901301040355706100466")
 	body.Set("total_amount", "101.00")
 	//创建订单
 	aliRsp, err := client.AliPayTradeCreate(body)
@@ -151,9 +152,9 @@ func TestAliPayClient_AliPayTradeWapPay(t *testing.T) {
 	//请求参数
 	body := make(BodyMap)
 	body.Set("subject", "手机网站测试支付")
-	body.Set("out_trade_no", "GZ201901301040355702")
+	body.Set("out_trade_no", "GYWX201901301040355706100462")
 	body.Set("quit_url", "https://www.gopay.ink")
-	body.Set("total_amount", "10.00")
+	body.Set("total_amount", "100.00")
 	body.Set("product_code", "QUICK_WAP_WAY")
 	//手机网站支付请求
 	payUrl, err := client.AliPayTradeWapPay(body)
@@ -248,6 +249,20 @@ func TestFormatAliPayPublicKey(t *testing.T) {
 	fmt.Println(pKey)
 }
 
+func TestAlipaySystemOauthToken(t *testing.T) {
+	privateKey := "MIIEpAIBAAKCAQEA0N6CzO4T6NEgWrlW+mrZYMZSNAQ/vBeaCzo1qT+VYNBbklYWxwyUT4JptswSkupdSZGzKVX8rgTBnIbJXjaL9OuUS4KpkOVtqnW9uaPlei7kh2vHkyzbJS85HG8r4XwrrNGY/o4kp/ur51X5dSNPR+Bd5L/0/SUxztsMS8w2onkKk+VNh95yNQx3ZX0XXDhJGmURHFhuWf3bd0XYGoAsLfuEVj95dKOVUodP6RduGJYd/23CBWQfsapA2SxB/X8/ol/7pCgI9UxYkSm88dFZF5BygBv4Alc77ZP2G05VLRtyaEgvzooXzb7N9QEPWsMD4e7sjuuyhUWXakP78BN7tQIDAQABAoIBAGSqeVwPeqUA9ZkELrlueeo8ay4KxjT/Iw06NtalgHcytI+o0j2JAIn5jr29SU5piiCFClZnzOqJ/E5WYAL6QyX9zHFAPj1Jdjtrl887AMSMiTQDbCKwwcYAJoRfyERatioKsrQtCdm0YDuUojAknndD2b0ADzFaldDeneSCPeq7kHVpAylhLIbzGmE7rGWy1gAnJ5ljza/QMQQkVX7MP852IFEwl+8dYeMK4snfKH4SBWbGgLSkfgemEL3mbHaocl2encFHQYjjFSWabUedOfmf0s81+KytsylKLxzZePAKCpbw7cBzf09wXO7YfFPWP3ORSZtEb6UsJAZBD7Kr1ZkCgYEA9DFdgInepyyFgg4w0ljg7HzRT+2U8xGV/rzO6Yc3HerXKWlhUQlAxq+nLW//MZ4RKRilkQmp9876S2jchATXroU+D620q7RmwN80EPhJC3HuAD/vv13rXJpRLhOElL4eMfbllqN/p7Xu0i4P8qrN/WmyICBN4HQxwiAPacOejNMCgYEA2vfoQpcpfDh+pfFvh1kpZLqEsqNdap9Su/dBmtv0oXDST78Azh4WXskoF0g9MQIkUZDjM3Aaa3qWeVI7p8FW8pk1vC1ktD/3x5K19d/eTJYjw4zaxLSDu/8KXkk8+NjpbBJNiUmidFk8y9n15o98AmLmRx5xYeHosH2Y+W6D4FcCgYEA0F7rbYq3/qkEB7V6PZPv4nyj03NlHYENIEEWwrlJ8/J3xXORwieGKcSrgB9IgJtkA1Bvv3Kiob3xYLXLLbBAJ0C1c4WDXN1krQIJmM107xo5v+bO+tn2w58+1HV9NbuBYptO0BsWDBM4BgueOjE78xjlEXrfWT9tUjwvSs3NFlcCgYBakX2ExYdINQnVU1aBEhT379nhFYcXCc0rp+p/xgiaGdMzXtpTZshz7hnh/2Qn+C3Teu0uomibGfpRNf0stuBiuZIrQk9L6sVuy7TtfOoynUsvn/wArnVqdePw+bP5baamp69gYI+MNjjaTE3UTnbJeeSrd+EHzmvzTA/Q47AyQwKBgQC50qZ0jV1WsNfyvv3YyGmlLiyLFEPZ6aDY+gntgeXJ3fCORy90LOk+4FfkaWdIEGH21+dIx7g7oEa9rTt2foqZnCmWWC3vRlDYsdpRYXz4UOKbHsBocWvSCSOmQ8XgwoDve1MhAz7yOlrHIzX816Ld7QHQdI/d/Z4j1LrMyIWP7A=="
+	rsp, err := AlipaySystemOauthToken("2019071565794663", privateKey, "", "06e8961891d647c0ac99bb1cebe7SE69")
+	if err != nil {
+		fmt.Println("gopay.AlipaySystemOauthToken:", err)
+		return
+	}
+	fmt.Println("rsp:", *rsp)
+	//fmt.Println("rsp:", rsp.ErrorResponse.Code)
+	//fmt.Println("rsp:", rsp.ErrorResponse.Msg)
+	//fmt.Println("rsp:", rsp.ErrorResponse.SubCode)
+	//fmt.Println("rsp:", rsp.ErrorResponse.SubMsg)
+}
+
 type List struct {
 	BillList []FundBillListInfo `json:"bill_list"`
 }