Skip to content

Commit 784c6b7

Browse files
authored
Merge pull request #261 from swordkee/master
update hms pay
2 parents 657b747 + 09acd89 commit 784c6b7

8 files changed

+361
-75
lines changed

appstore/validator.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"encoding/json"
99
"errors"
1010
"fmt"
11-
"io/ioutil"
11+
"io"
1212
"net/http"
1313
"time"
1414

@@ -149,7 +149,7 @@ func (c *Client) verify(ctx context.Context, reqBody IAPRequest, result interfac
149149

150150
func (c *Client) parseResponse(resp *http.Response, result interface{}, ctx context.Context, reqBody IAPRequest) (int, error) {
151151
// Read the body now so that we can unmarshal it twice
152-
buf, err := ioutil.ReadAll(resp.Body)
152+
buf, err := io.ReadAll(resp.Body)
153153
if err != nil {
154154
return 0, err
155155
}

appstore/validator_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"context"
55
"errors"
66
"github.com/golang-jwt/jwt/v4"
7-
"io/ioutil"
7+
"io"
88
"net/http"
99
"net/http/httptest"
1010
"reflect"
@@ -284,7 +284,7 @@ func TestHttpStatusErrors(t *testing.T) {
284284

285285
func TestCannotReadBody(t *testing.T) {
286286
client := New()
287-
testResponse := http.Response{Body: ioutil.NopCloser(errReader(0))}
287+
testResponse := http.Response{Body: io.NopCloser(errReader(0))}
288288

289289
ctx := context.Background()
290290
if _, err := client.parseResponse(&testResponse, IAPResponse{}, ctx, IAPRequest{}); err == nil {
@@ -294,7 +294,7 @@ func TestCannotReadBody(t *testing.T) {
294294

295295
func TestCannotUnmarshalBody(t *testing.T) {
296296
client := New()
297-
testResponse := http.Response{Body: ioutil.NopCloser(strings.NewReader(`{"status": true}`))}
297+
testResponse := http.Response{Body: io.NopCloser(strings.NewReader(`{"status": true}`))}
298298

299299
ctx := context.Background()
300300
if _, err := client.parseResponse(&testResponse, StatusResponse{}, ctx, IAPRequest{}); err == nil {

hms/client.go

+25-13
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"encoding/json"
77
"errors"
88
"fmt"
9-
"io/ioutil"
9+
"io"
1010
"net/http"
1111
"net/url"
1212
"strings"
@@ -29,7 +29,7 @@ var applicationAccessTokens = make(map[[16]byte]ApplicationAccessToken)
2929
var applicationAccessTokensLock sync.Mutex
3030

3131
// ApplicationAccessToken model, received from HMS OAuth API
32-
// https://developer.huawei.com/consumer/en/doc/HMSCore-Guides-V5/open-platform-oauth-0000001050123437-V5#EN-US_TOPIC_0000001050123437__section12493191334711
32+
// https://developer.huawei.com/consumer/en/doc/HMSCore-Guides/open-platform-oauth-0000001050123437#EN-US_TOPIC_0000001050123437__section12493191334711
3333
type ApplicationAccessToken struct {
3434
// App-level access token.
3535
AccessToken string `json:"access_token"`
@@ -62,7 +62,7 @@ type Client struct {
6262
// If orderSiteURL or subscriptionSiteURL are not set, default to AppTouch Germany site.
6363
//
6464
// Please refer https://developer.huawei.com/consumer/en/doc/start/api-console-guide
65-
// and https://developer.huawei.com/consumer/en/doc/HMSCore-References-V5/api-common-statement-0000001050986127-V5 for details.
65+
// and https://developer.huawei.com/consumer/en/doc/HMSCore-References/api-common-statement-0000001050986127 for details.
6666
func New(clientID, clientSecret, orderSiteURL, subscriptionSiteURL string) *Client {
6767
// Set default order / subscription iap site to AppTouch Germany if it is not provided
6868
if !strings.HasPrefix(orderSiteURL, "http") {
@@ -91,7 +91,7 @@ func New(clientID, clientSecret, orderSiteURL, subscriptionSiteURL string) *Clie
9191
func (c *Client) GetApplicationAccessTokenHeader() (string, error) {
9292
// To complie with the rate limit (1000/5min as of July 24th, 2020)
9393
// new AccessTokens are requested only when it is expired.
94-
// Please refer https://developer.huawei.com/consumer/en/doc/HMSCore-Guides-V5/open-platform-oauth-0000001050123437-V5 for detailes
94+
// Please refer https://developer.huawei.com/consumer/en/doc/HMSCore-Guides/open-platform-oauth-0000001050123437 for detailes
9595
if applicationAccessTokens[c.clientIDSecretHash].ExpiredAt > time.Now().Unix() {
9696
return applicationAccessTokens[c.clientIDSecretHash].HeaderString, nil
9797
}
@@ -102,7 +102,7 @@ func (c *Client) GetApplicationAccessTokenHeader() (string, error) {
102102
return "", err
103103
}
104104
defer resp.Body.Close()
105-
bodyBytes, err := ioutil.ReadAll(resp.Body)
105+
bodyBytes, err := io.ReadAll(resp.Body)
106106
if err != nil {
107107
return "", err
108108
}
@@ -136,7 +136,13 @@ func (c *Client) GetApplicationAccessTokenHeader() (string, error) {
136136
func (c *Client) getRootOrderURLByFlag(flag int64) string {
137137
switch flag {
138138
case 1:
139-
return "https://orders-at-dre.iap.dbankcloud.com"
139+
return "https://orders-drcn.iap.cloud.huawei.com.cn"
140+
case 2:
141+
return "https://orders-dre.iap.cloud.huawei.eu"
142+
case 3:
143+
return "https://orders-dra.iap.cloud.huawei.asia"
144+
case 4:
145+
return "https://orders-drru.iap.cloud.huawei.ru"
140146
}
141147
return c.orderSiteURL
142148
}
@@ -145,7 +151,13 @@ func (c *Client) getRootOrderURLByFlag(flag int64) string {
145151
func (c *Client) getRootSubscriptionURLByFlag(flag int64) string {
146152
switch flag {
147153
case 1:
148-
return "https://subscr-at-dre.iap.dbankcloud.com"
154+
return "https://subscr-drcn.iap.cloud.huawei.com.cn"
155+
case 2:
156+
return "https://subscr-dre.iap.cloud.huawei.eu"
157+
case 3:
158+
return "https://subscr-dra.iap.cloud.huawei.asia"
159+
case 4:
160+
return "https://subscr-drru.iap.cloud.huawei.ru"
149161
}
150162
return c.subscriptionSiteURL
151163
}
@@ -176,33 +188,33 @@ func (c *Client) getResponseErrorByCode(code string) error {
176188
var ErrorResponseUnknown error = errors.New("Unknown error from API response")
177189

178190
// ErrorResponseSignatureVerifyFailed failed to verify dataSignature against the response json string.
179-
// https://developer.huawei.com/consumer/en/doc/HMSCore-Guides-V5/verifying-signature-returned-result-0000001050033088-V5
191+
// https://developer.huawei.com/consumer/en/doc/HMSCore-Guides/verifying-signature-returned-result-0000001050033088
180192
// var ErrorResponseSignatureVerifyFailed error = errors.New("Failed to verify dataSignature against the response json string")
181193

182194
// ErrorResponseInvalidParameter The parameter passed to the API is invalid.
183195
// This error may also indicate that an agreement is not signed or parameters are not set correctly for the in-app purchase settlement in HUAWEI IAP, or the required permission is not in the list.
184196
//
185197
// Check whether the parameter passed to the API is correctly set. If so, check whether required settings in HUAWEI IAP are correctly configured.
186-
// https://developer.huawei.com/consumer/en/doc/HMSCore-References-V5/server-error-code-0000001050166248-V5
198+
// https://developer.huawei.com/consumer/en/doc/HMSCore-References/server-error-code-0000001050166248
187199
var ErrorResponseInvalidParameter error = errors.New("The parameter passed to the API is invalid")
188200

189201
// ErrorResponseCritical A critical error occurs during API operations.
190202
//
191203
// Rectify the fault based on the error information in the response. If the fault persists, contact Huawei technical support.
192-
// https://developer.huawei.com/consumer/en/doc/HMSCore-References-V5/server-error-code-0000001050166248-V5
204+
// https://developer.huawei.com/consumer/en/doc/HMSCore-References/server-error-code-0000001050166248
193205
var ErrorResponseCritical error = errors.New("A critical error occurs during API operations")
194206

195207
// ErrorResponseProductNotBelongToUser A user failed to consume or confirm a product because the user does not own the product.
196208
//
197-
// https://developer.huawei.com/consumer/en/doc/HMSCore-References-V5/server-error-code-0000001050166248-V5
209+
// https://developer.huawei.com/consumer/en/doc/HMSCore-References/server-error-code-0000001050166248
198210
var ErrorResponseProductNotBelongToUser error = errors.New("A user failed to consume or confirm a product because the user does not own the product")
199211

200212
// ErrorResponseConsumedProduct The product cannot be consumed or confirmed because it has been consumed or confirmed.
201213
//
202-
// https://developer.huawei.com/consumer/en/doc/HMSCore-References-V5/server-error-code-0000001050166248-V5
214+
// https://developer.huawei.com/consumer/en/doc/HMSCore-References/server-error-code-0000001050166248
203215
var ErrorResponseConsumedProduct error = errors.New("The product cannot be consumed or confirmed because it has been consumed or confirmed")
204216

205217
// ErrorResponseAbnormalUserAccount The user account is abnormal, for example, the user has been deregistered.
206218
//
207-
// https://developer.huawei.com/consumer/en/doc/HMSCore-References-V5/server-error-code-0000001050166248-V5
219+
// https://developer.huawei.com/consumer/en/doc/HMSCore-References/server-error-code-0000001050166248
208220
var ErrorResponseAbnormalUserAccount error = errors.New("The user account is abnormal, for example, the user has been deregistered")

0 commit comments

Comments
 (0)