Попытка получить доступ к WSDL FirstData через API на Localhost с PHP - PullRequest
0 голосов
/ 04 октября 2011

Прежде всего, позвольте мне сказать, что я относительно новичок в SOAP / WSDL / API, так что этот пост будет немного многословным, потому что я понятия не имею, что происходит.Я последние несколько часов гуглюл без удачи.Я надеюсь, что кто-то здесь может указать мне правильное направление, чтобы я мог двигаться дальше.

Я пытаюсь использовать API FirstData для создания сценария оплаты PHP.У меня проблемы с доступом к их WSDL через их API с использованием PHP.Мой локон (на основе их документации ):

$wsdl = "https://ws.merchanttest.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl";

$userid = "WSxxxxxxxxxxx._.1";
$password = "xxxxxxxxxx";
$pemlocation = realpath("WSxxxxxxxxxx._.1.pem");
$kslocation = realpath("WSxxxxxxxxxx._.1.key");
$keyname = "ckp_xxxxxxxx";

$transactiontype = "sale";
$creditcardnumber = "4111111111111111";
$cardexpirationmonth = "10";
$cardexpirationyear = "12";
$chargetotal = "1";

$body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
$body .= "<SOAP-ENV:Envelope xmlns:SOAP-    ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">";
$body .= "<SOAP-ENV:Header />";
$body .= "<SOAP-ENV:Body>";
$body .= "<fdggwsapi:FDGGWSApiOrderRequest xmlns:fdggwsapi= \"http://secure.linkpt.net/fdggwsapi/schemas_us/fdggwsapi\">";
$body .= "<v1:Transaction xmlns:v1= \"http://secure.linkpt.net/fdggwsapi/schemas_us/v1\">";
$body .= "<v1:CreditCardTxType>";
$body .= "<v1:Type>";
$body .= $transactiontype;
$body .= "</v1:Type>";
$body .= "</v1:CreditCardTxType>";
$body .= "<v1:CreditCardData>";
$body .= "<v1:CardNumber>";
$body .= $creditcardnumber;
$body .= "</v1:CardNumber>";
$body .= "<v1:ExpMonth>";
$body .= $cardexpirationmonth;
$body .= "</v1:ExpMonth>";
$body .= "<v1:ExpYear>";
$body .= $cardexpirationyear;
$body .= "</v1:ExpYear>";
$body .= "</v1:CreditCardData>";
$body .= "<v1:Payment>";
$body .= "<v1:ChargeTotal>";
$body .= $chargetotal;
$body .= "</v1:ChargeTotal>";
$body .= "</v1:Payment>";
$body .= "</v1:Transaction>";
$body .= "</fdggwsapi:FDGGWSApiOrderRequest>";
$body .= "</SOAP-ENV:Body>";
$body .= "</SOAP-ENV:Envelope>";

$ch = curl_init($wsdl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$userid:$password");
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSLCERT, $pemlocation);
curl_setopt($ch, CURLOPT_SSLKEY, $kslocation);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $keyname);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
print_r($result);

, который возвращает HTTP Status 401 - type: Status report | description: This request requires HTTP authentication (). | JBossWeb/2.0.0.GA.Согласно их документации OpenSSL, требуются SSL certificate и TCP Port 1129.Так как я ничего не получил, я предположил, что это потому, что мой OpenSSL не установлен на моем XAMPP.Если это не имеет смысла (?) Пропустите следующий бит.

Я попытался настроить свой SSL в apache под XAMPP.xampp\apache\makecert выход:

Unable to load config info from ./bin/openssl.cnf
Error opening Private Key privkey.pem
6264:error:02001002:system library:fopen:No such file or directory:.\crypto\bio\bass_file.c:356:fopen('privkey.pem','rb')
6264:error:20064002:BIO routines:FILE_CTRL:system lib:.\crypto\bio\file.c:358:unable to load Private Key
Loading 'screen' into random state - done
server.csr: No such file or directory
Could Not Find c:\xampp\apache\.rnd
Could Not Find c:\xampp\apache\prikey.pem
Could Not Find c:\xampp\apache\server.csr
The system cannot find the file specified.
The system cannot find the file specified.

Мой openssl.cnf находится @ c:\xampp\php\extras\openssl\openssl.cnf.Я сделал openssl req -new -key digitss.key -out digitss.csr -config "c:\xampp\php\extras\openssl\openssl.cnf", который сделал сработало, но в итоге ничего не сделал.Я не уверен, как запустить SSL.

В любом случае, если кто-нибудь сможет пролить свет на мою проблему, я буду очень признателен.Я не знаю, мой ли это PHP, $body var или тот факт, что я пытаюсь получить доступ к WSDL без SSL (или комбинации всех трех).Я видел несколько вариантов кода, который использовал, поэтому думаю, что это правильно.У меня установлена ​​пробная учетная запись для FirstData, а также файлы .pem и .key, которые я могу отправить кому угодно, если они захотят помочь мне разобраться в этом.Я в полной растерянности!

Заранее спасибо,

Tre

1 Ответ

1 голос
/ 05 октября 2011

Я полагаю, что вы перепутали API первых данных.

Существует 2 API первых данных:

  • API первых данных Global Gateway 2
  • Первые глобальные данныеAPI веб-службы шлюза

API веб-службы отправляется через порт 443, устаревший API - через порт 1129.

Вы хотите использовать порт 443 для кода, который вы перечислиливыше в вашем запросе curl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...