사용자가 WooCommerce 상점을 내 사이트와 통합 할 수있는 앱을 작성 중입니다. Python wrapper for the WooCommerce REST API을 사용 중이며 내 앱이 Google App Engine에서 호스팅됩니다. Woocommerce API를 호출하는 코드는 다음과 같습니다. WooCommerce API는 Google App Engine에서 401을 제공하지만 현지 환경에서 작동합니다 (200 OK).
def request_woo_api(self, user, request_url):
wcapi = API(
url=user.woo_url,
consumer_key=user.woo_consumer_key,
consumer_secret=user.woo_consumer_secret,
wp_api=True,
version="wc/v2",
query_string_auth=True
)
resp = wcapi.get(request_url).json()
return resp
은 내가 내 dev에 컴퓨터에 내 코드를 테스트 200 OK 응답을 (나는 모든 WooCommerce 매장에 연결하기 위해 HTTPS를 사용하고 있습니다). 하지만 Google App Engine에 코드를 배포 할 때
WooCommerce 매장에 대한 401 응답을받습니다.
{u'message': u'Sorry, you cannot list resources.', u'code': u'woocommerce_rest_cannot_view', u'data': {u'status': 401}}
내가 구글 앱 엔진은 모든 아웃 바운드 요청에 대해
user-agent
헤더에 값 (
AppEngine-Google; (http://code.google.com/appengine; appid: <application_id>)
)를 추가이 문서에
here를 참조하십시오. 내 로컬 컴퓨터에서 woocommerce API를 호출 해 보았 기 때문에 문제가되었다고 생각합니다. 그러나이 값을 내 헤더에 추가하면 같은 끝점에서 401 오류가 발생합니다.
>>> headers = {'User-Agent': 'WooCommerce API Client-Python/1.2.1'}
>>> result = requests.get(url, headers=headers)
>>> print result.json()
[{u'date_completed_gmt': None, u'date_modified_gmt': u'2017-11-30T18:13:59', u'payment_method': u'.......
>>> headers = {'User-Agent': 'WooCommerce API Client-Python/1.2.1; AppEngine-Google; (http://code.google.com/appengine; appid: 123)'}
>>> result = requests.get(url, headers=headers)
>>> print result.json()
{u'message': u'Sorry, you cannot list resources.', u'code': u'woocommerce_rest_cannot_view', u'data': {u'status': 401}}
이는 WooCommerce 사이트가 아닌 다른 사람의 몇 일이 사실은 나에게 이러한 사용자가이 isssue을 일으키는 WooCommerce 설정/플러그인 확장/보안 설정이있을 수 있다고 생각합니다. 어떤 방법이 있습니까?
- GAE가 아웃 바운드 요청에이 헤더를 추가하는 것을 중지 하시겠습니까?
- WooCoomerce 저장소가
user-agent
값을 기반으로 요청을 필터링하지 못하게하는 플러그인 또는 설정을 해제 하시겠습니까? (보안 설정을 사이트로 변경하도록 사용자에게 요청할 수 있음)
도와주세요.
은 (난 이미 다음과 도움이되지 않은 시도 :.- 대신 Python wrapper for the WooCommerce REST API의 requests를 사용하여 시도하고 내가 같은 동작을 얻을, 지역 ENV에서 작동하지만 GAE에서 401 오류를 반환
- 추가는
query_string_auth=True
도 제안 - 는
_method=GET
쿼리 매개 변수를 추가 시도 (단지의 경우 사용자가 자체 서명 된 테스트 사이트를 사용했다)verify_ssl=False
를 추가하는 시도 here - 는 설정을 시도
content-type
나는 WooCommerce 저장소 서버가 쿼리 문자열 매개 변수를 무시 발견 추가 조사시 제안 here로 "응용 프로그램/텍스트")
UPDATE
합니다.
"query_string_auth = true"설정을 보내지 않으면 응답을받을 수 있습니다. 그러나 저장소는 모든 쿼리 매개 변수를 무시합니다. query_string_auth 매개 변수는 쿼리 문자열에 consumer_key 및 secret을 보냅니다. 제거하면 인증 헤더로 사용됩니다. 이제는 인증 헤더로 보내고 응답합니다. 그러나 쿼리 매개 변수를 무시합니다. 내 생각 엔 서버가 모든 쿼리 매개 변수를 무시한다는 것입니다. 그래서 내가 처음에 401을 얻는 이유가 설명됩니다. (우리가 쿼리 매개 변수로 키와 비밀 키를 보냈기 때문에).그리고 이것은 "User-Agent : AppEngine-Google;"을 보낼 때만 발생합니다.
예 :
이store_url = "https://teststore.com"
endpoint = "/wp-json/wc/v2/orders?per_page=1"
auth = ("ck_xxxxxxxxxxx", "cs_xxxxxxxxxxx")
headers = {'Content-Type': 'application/json', 'User-Agent': 'WooCommerce API Client-Python/1.2.1'}
url = '{}/{}'.format(store_url, endpoint)
response = requests.get(url, auth=auth, headers=headers)
print response.json()
이 정확히 하나의 순서로 반환합니다.
store_url = "https://teststore.com"
endpoint = "/wp-json/wc/v2/orders?per_page=1"
auth = ("ck_xxxxxxxxxxx", "cs_xxxxxxxxxxx")
headers = {'Content-Type': 'application/json', 'User-Agent': 'WooCommerce API Client-Python/1.2.1; AppEngine-Google; (+http://code.google.com/appengine; appid: 123)'}
url = '{}/{}'.format(store_url, endpoint)
response = requests.get(url, auth=auth, headers=headers)
print response.json()
이 10 개 주문을 반환합니다 (기본 페이지 크기는 10)
그러나 일부 점포 방법이 문제를 해결하는 방법이 또는을 난 아직도 왜 아무 생각이 없습니다.