WooCommerce Webhook: 잘못된 URL
주문 작성 시 웹 훅을 작동하도록 WooCommerce를 셋업하고 있습니다.웹 훅의 URL을 이 목적을 위해 설정한 로컬 웹 API의 URL로 설정했습니다.
http://localhost:3000/store/orders/new
WooCommerce는 올바른 데이터 payload를 사용하여 웹 훅을 트리거하지만 웹 훅 로그에는 요청이 실패한 것으로 보고됩니다.
Status: HTTP http_request_failed Es wurde keine gültige URL übermittelt.: Array
독일어로 번역하면 "유효한 URL이 전달되지 않았습니다"를 의미합니다.
그 후 URL을 당사의 API(https://xxx.azurewebsites.net/store/order/new),의 웹 방향 배치로 변경했는데, API에 의해 웹 훅이 문제없이 수신되었습니다.
WC Webhook이 커스텀 포트(내 경우는 포트 3000)를 가진 URL에서 잘 재생되지 않는지 잘 모르겠습니다.그래서 WC Webhook을 로컬호스트 개발 환경에서 잘 재생시킬 수 있는 방법이 있는지 묻고 싶었습니다.
WooCommerce 버전 3.3.5에서는 Bjorn의 솔루션이 작동하지 않는 것 같습니다.
내 경우엔 파일을 편집해야 했다.wp-content/plugins/woocommerce/includes/class-wc-webhook.php:185
,방법deliver
.
코멘트:wp_safe_remote_request
대신 안전하지 않은http 요구 방식을 사용합니다.
// Webhook away!
$http_call = _wp_http_get_object();
$response = $http_call->request( $this->get_delivery_url(), $http_args );
//$response = wp_safe_remote_request( $this->get_delivery_url(), $http_args );
파일 끝에 wp-content/temes/MYTHEME/functions 코드를 삽입하여 해결했습니다.php
function allow_unsafe_urls ( $args ) {
$args['reject_unsafe_urls'] = false;
return $args;
} ;
add_filter( 'http_request_args', 'allow_unsafe_urls' );
커스텀 포트가 아니라 localhost입니다.
wp-includes/http.php wp_http_validate_url()에는 true를 반환하는http_request_host_is_external 필터에 의해 특별히 허가되지 않는 한 모든 종류의 로컬 IP를 거부하는 체크가 있습니다.
건배, 비욘
다음 함수에서
/** * HTTP API에서 안전하게 사용하기 위한 URL을 확인합니다.* * * * @since 3.5.2 * * * @param string $url * @return false | string URL 또는 false 오류 발생 시.*/
이 행을 코멘트하다
if ( isset( $parsed_home['host'] ) ) {
//$same_host = ( strtolower( $parsed_home['host'] ) === strtolower( $parsed_url['host'] ) || 'localhost' === strtolower( $parsed_url['host'] ) );
$same_host = false;
} else {
$same_host = false;
}
예를 들어 larabel에서 다른 포트를 사용하는 경우 여기에 포트를 추가해야 합니다.
if ( empty( $parsed_url['port'] ) )
return $url;
$port = $parsed_url['port'];
if ( 80 === $port || 443 === $port || 8080 === $port || 8000 === $port )
return $url;
if ( $parsed_home && $same_host && isset( $parsed_home['port'] ) && $parsed_home['port'] === $port )
return $url;
return false;
}
이에 대한 답을 찾고 있는 사람이 있다면 WebHook을 수신하는 서버를 가리키는A DNS 레코드를 작성하고 방화벽의 내부 트래픽만 허용하는 것이 해결책이었습니다.
Digital Ocean의 VPC + 방화벽 및 Cloudflare를 사용하는 단계:
- CloudFlare에 로그인하여 서버의 공용 IP를 가리키는 A 레코드를 만듭니다.
- Digital Ocean 패널에서 방화벽으로 이동하여 원본 서버(또는 태그)로부터의 트래픽만 허용합니다.
- WooCommerce에서 웹 훅을 정상적으로 설정합니다.
펠리페
나에게 효과가 있었던 것:
- class-http.php에서 변경
'reject_unsafe_urls' => apply_filters( 'http_request_reject_unsafe_urls', false, $url ),
로.
'reject_unsafe_urls' => apply_filters( 'http_request_reject_unsafe_urls', true, $url ),
- http.php에서 이 행에 포트를 추가합니다(이 예에서는 포트 3000을 추가했습니다).
if ( 80 === $port || 443 === $port || 8080 === $port || 3000 === $port ) {
WooCommerce 4.2.2에서 동작합니다.
Word press http word word word word word 、 http word word word word word word word word 。 ", aganinst "의 쿼리는 할 수 .localhost:8080
효과가 있을 거야
, 하다, 하다, 하다'를 수정할 도 있어요.http.php
한
언급URL : https://stackoverflow.com/questions/31875442/woocommerce-webhook-invalid-url
'programing' 카테고리의 다른 글
커스텀 프런트 엔드 폼을 사용한Woocommerce 제품 태그 및 카테고리 설정 (0) | 2023.04.01 |
---|---|
키에 콜론이 있는 JSON 개체 선택 (0) | 2023.04.01 |
JSON 키는 고유해야 합니까? (0) | 2023.04.01 |
json.net을 사용하여 시리얼화된 JSON 문자열에 추가 속성을 추가하려면 어떻게 해야 합니까? (0) | 2023.04.01 |
투고 제목별로 WordPress 투고 가져오기 (0) | 2023.04.01 |