Jerry пре 6 година
родитељ
комит
205c6ea325
4 измењених фајлова са 81 додато и 78 уклоњено
  1. 1 0
      README.md
  2. 1 0
      README_EN.md
  3. 70 69
      alipay_service_api.go
  4. 9 9
      examples/alipay/alipay_ServiceApi.go

+ 1 - 0
README.md

@@ -85,6 +85,7 @@
 
 ## 支付宝公共API
 
+* gopay.AliPaySystemOauthToken() => 换取授权访问令牌(得到access_token,user_id等信息)
 * gopay.FormatPrivateKey() => 格式化应用私钥
 * gopay.FormatAliPayPublicKey() => 格式化支付宝公钥
 * gopay.ParseAliPayNotifyResult() => 解析并返回支付宝支付异步通知的参数

+ 1 - 0
README_EN.md

@@ -85,6 +85,7 @@ The Golang SDK for WeChat and AliPay
 
 ## Alipay Public API
 
+* gopay.AliPaySystemOauthToken() => Obtain authorized access token(obtain access_token, user_id and so on)
 * gopay.FormatPrivateKey() => Format private key
 * gopay.FormatAliPayPublicKey() => Format alipay public key
 * gopay.ParseAliPayNotifyResult() => Parse the parameters of Alipay Payment asynchronous notification to Struct

+ 70 - 69
alipay_service_api.go

@@ -16,6 +16,7 @@ import (
 	"log"
 	"net/http"
 	"reflect"
+	"time"
 )
 
 //解析支付宝支付完成后的Notify信息
@@ -297,72 +298,72 @@ func verifyAliPaySign(signData, sign, signType, aliPayPublicKey string) (err err
 //    grantType:值为 authorization_code 时,代表用code换取;值为 refresh_token 时,代表用refresh_token换取,传空默认code换取
 //    codeOrToken:支付宝授权码或refresh_token
 //    文档:https://docs.open.alipay.com/api_9/alipay.system.oauth.token
-//func AliPaySystemOauthToken(appId, privateKey, grantType, codeOrToken string) (rsp *AliPaySystemOauthTokenResponse, err error) {
-//	var bs []byte
-//	body := make(BodyMap)
-//	if "authorization_code" == grantType {
-//		body.Set("grant_type", "authorization_code")
-//		body.Set("code", codeOrToken)
-//	} else if "refresh_token" == grantType {
-//		body.Set("grant_type", "refresh_token")
-//		body.Set("refresh_token", codeOrToken)
-//	} else {
-//		body.Set("grant_type", "authorization_code")
-//		body.Set("code", codeOrToken)
-//	}
-//	bs, err = doAliPay(appId, privateKey, body, "alipay.system.oauth.token")
-//	if err != nil {
-//		return nil, err
-//	}
-//	//fmt.Println("bs:", string(bs))
-//	rsp = new(AliPaySystemOauthTokenResponse)
-//	err = json.Unmarshal(bs, rsp)
-//	if err != nil {
-//		return nil, err
-//	}
-//	if rsp.AliPaySystemOauthTokenResponse.AccessToken != "" {
-//		return rsp, nil
-//	} else {
-//		return
-//	}
-//}
-//
-////向支付宝发送请求
-//func doAliPay(appId, privateKey string, body BodyMap, method string) (bytes []byte, err error) {
-//	//===============生成参数===================
-//	//pubBody := make(BodyMap)
-//	body.Set("app_id", appId)
-//	body.Set("method", method)
-//	body.Set("format", "JSON")
-//	body.Set("charset", "utf-8")
-//	body.Set("sign_type", "RSA2")
-//	body.Set("timestamp", time.Now().Format(TimeLayout))
-//	body.Set("version", "1.0")
-//	//pubBody.Set("biz_content", string(bodyStr))
-//	//===============获取签名===================
-//	pKey := FormatPrivateKey(privateKey)
-//	sign, err := getRsaSign(body, "RSA2", pKey)
-//	if err != nil {
-//		return nil, err
-//	}
-//	body.Set("sign", sign)
-//	//fmt.Println("rsaSign:", sign)
-//	//===============发起请求===================
-//	urlParam := FormatAliPayURLParam(body)
-//	//fmt.Println("urlParam:", urlParam)
-//
-//	var url string
-//	agent := HttpAgent()
-//	//正式环境
-//	url = zfb_base_url_utf8
-//	//fmt.Println(url)
-//	agent.Post(url)
-//	_, bs, errs := agent.
-//		Type("form-data").
-//		SendString(urlParam).
-//		EndBytes()
-//	if len(errs) > 0 {
-//		return nil, errs[0]
-//	}
-//	return bs, nil
-//}
+func AliPaySystemOauthToken(appId, privateKey, grantType, codeOrToken string) (rsp *AliPaySystemOauthTokenResponse, err error) {
+	var bs []byte
+	body := make(BodyMap)
+	if "authorization_code" == grantType {
+		body.Set("grant_type", "authorization_code")
+		body.Set("code", codeOrToken)
+	} else if "refresh_token" == grantType {
+		body.Set("grant_type", "refresh_token")
+		body.Set("refresh_token", codeOrToken)
+	} else {
+		body.Set("grant_type", "authorization_code")
+		body.Set("code", codeOrToken)
+	}
+	bs, err = doAliPay(appId, privateKey, body, "alipay.system.oauth.token")
+	if err != nil {
+		return nil, err
+	}
+	//fmt.Println("bs:", string(bs))
+	rsp = new(AliPaySystemOauthTokenResponse)
+	err = json.Unmarshal(bs, rsp)
+	if err != nil {
+		return nil, err
+	}
+	if rsp.AliPaySystemOauthTokenResponse.AccessToken != "" {
+		return rsp, nil
+	} else {
+		return
+	}
+}
+
+//向支付宝发送请求
+func doAliPay(appId, privateKey string, body BodyMap, method string) (bytes []byte, err error) {
+	//===============生成参数===================
+	//pubBody := make(BodyMap)
+	body.Set("app_id", appId)
+	body.Set("method", method)
+	body.Set("format", "JSON")
+	body.Set("charset", "utf-8")
+	body.Set("sign_type", "RSA2")
+	body.Set("timestamp", time.Now().Format(TimeLayout))
+	body.Set("version", "1.0")
+	//pubBody.Set("biz_content", string(bodyStr))
+	//===============获取签名===================
+	pKey := FormatPrivateKey(privateKey)
+	sign, err := getRsaSign(body, "RSA2", pKey)
+	if err != nil {
+		return nil, err
+	}
+	body.Set("sign", sign)
+	//fmt.Println("rsaSign:", sign)
+	//===============发起请求===================
+	urlParam := FormatAliPayURLParam(body)
+	//fmt.Println("urlParam:", urlParam)
+
+	var url string
+	agent := HttpAgent()
+	//正式环境
+	url = zfb_base_url_utf8
+	//fmt.Println(url)
+	agent.Post(url)
+	_, bs, errs := agent.
+		Type("form-data").
+		SendString(urlParam).
+		EndBytes()
+	if len(errs) > 0 {
+		return nil, errs[0]
+	}
+	return bs, nil
+}

+ 9 - 9
examples/alipay/alipay_ServiceApi.go

@@ -21,15 +21,15 @@ func FormatAliPayPublicKey() {
 	fmt.Println(pKey)
 }
 
-//func AliPaySystemOauthToken() {
-//	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="
-//	rsp, err := gopay.AliPaySystemOauthToken("2016091200494382", privateKey, "", "06e8961891d647c0ac99bb1cebe7SE69")
-//	if err != nil {
-//		fmt.Println("gopay.AliPaySystemOauthToken:", err)
-//		return
-//	}
-//	fmt.Println("rsp:", *rsp)
-//}
+func AliPaySystemOauthToken2() {
+	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="
+	rsp, err := gopay.AliPaySystemOauthToken("2016091200494382", privateKey, "", "06e8961891d647c0ac99bb1cebe7SE69")
+	if err != nil {
+		fmt.Println("gopay.AliPaySystemOauthToken:", err)
+		return
+	}
+	fmt.Println("rsp:", *rsp)
+}
 
 func DecryptAliPayOpenDataToStruct() {
 	data := "MkvuiIZsGOC8S038cu/JIpoRKnF+ZFjoIRGf5d/K4+ctYjCtb/eEkwgrdB5TeH/93bxff1Ylb+SE+UGStlpvcg=="