Прежде всего, позвольте мне сказать, что я относительно новичок в 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