Требование:
Мне нужно настроить ретранслятор для пересылки webhook с моего сервера на конечную точку ChartMogul — обычно это просто добавление нескольких строк кода в скрипт, который уже получает webhook на вашем сервере.
Проблемы, с которыми я сталкиваюсь
Я сталкиваюсь с проблемой при отправке данных в чартмогульский веб-крючок с использованием утилиты cURL в PHP. Вот код:
Строка кода
function updateChartmogul($xml) {
$url = 'https://app.chartmogul.com/api/events/****/Yi**********ArS***'; //Chartmogul webhook url
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, array("Content-Type: application/xml"));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // On dev server only!
$data = curl_exec($ch);
$response = curl_getinfo( $ch );
curl_close($ch);
}
updateChartmogul('<?xml version="1.0" encoding="UTF-8"?>
<new_subscription_notification>
<account>
<account_code>1</account_code>
<username>test1</username>
<email>[email protected]</email>
<first_name>testing</first_name>
<last_name>demo</last_name>
<company_name>demo</company_name>
</account>
<subscription>
<plan>
<plan_code>plan-b</plan_code>
<name>Plan-b</name>
</plan>
<uuid>2e3504c45933020c68368648ee998dd2</uuid>
<state>active</state>
<quantity type="integer">1</quantity>
<total_amount_in_cents type="integer">2000</total_amount_in_cents>
<subscription_add_ons type="array"/>
<activated_at type="datetime">2015-04-17T07:13:20Z</activated_at>
<canceled_at type="datetime" nil="true"></canceled_at>
<expires_at type="datetime" nil="true"></expires_at>
<current_period_started_at type="datetime">2015-04-17T07:13:20Z</current_period_started_at>
<current_period_ends_at type="datetime">2015-05-07T07:13:20Z</current_period_ends_at>
<trial_started_at type="datetime">2015-04-17T07:13:20Z</trial_started_at>
<trial_ends_at type="datetime">2015-05-07T07:13:20Z</trial_ends_at>
</subscription>
</new_subscription_notification>');
Я получаю этот ответ:
output of $data :
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Server: nginx/1.7.7
Date: Thu, 23 Apr 2015 07:35:22 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Status: 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
ETag: "444bcb3a3fcf83***467f27e1d6"Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 05c27dd5-***-42bd-99ab-b506446d1305
X-Runtime: 0.026330
Strict-Transport-Security: max-age=0
output of $response : ok
Пока я получаю ответ как «хорошо». Я не получаю отражения в моих данных в моем аккаунте в Чартмогуле. Я делаю это правильно?
Заметка
Я передал данные xml в жестком коде, которые совпадают с тем, что я получаю регулярно каждый раз, когда вызывается повторный webhook.
Ник из ChartMogul здесь.
Похоже, вы используете неправильную кодировку для пакетов, которые вы отправляете в ChartMogul. Вы должны использовать UTF-8 для кодирования запроса.
XML — это формат данных, UTF-8 — это кодировка данных.
Других решений пока нет …