- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在为电子商务购物车使用 SOAP API,但我似乎无法让 session 在不同的页面中持续存在。
作为示例,我在下面有一些测试代码(带有一堆调试消息),它将一个项目添加到购物车,然后查看购物车。当我在我的浏览器中运行它时它运行完美,但如果我刷新页面,我希望购物车中有两个项目(两个页面调用中的每一个)。但是,它似乎不记得以前调用该页面的任何内容。我知道 API 正在运行,因为如果我在此页面上调用“AddToCart”两次,然后调用“GetCartContents”,我会正确地看到购物车中的 2 件商品。
我错过了什么吗?
<?php
session_start();
$url = "https://www.example.com/soap-checkout.php?wsdl";
$client = new SoapClient($url, array("trace" => 1, "exception" => 0));
if (!empty($_SESSION['soapcookies'])) {
foreach($_SESSION['soapcookies'] AS $name=>$value) {
if (is_array($value)) {
foreach($value AS $k=>$v) {
$client->__setCookie($name[$k], $v);
}
} else {
$client->__setCookie($name, $value);
}
}
}
echo "<pre style='background: grey;'>browser cookies: ".print_r($_COOKIE, true)."</pre>";//debug
// Add to Cart
$data = array(
"domain" => 'www.example.net',
"sku" => "1234",
"qty" => 1
);
$result = $client->__soapCall("AddToCart", $data);
$responseHeader = $client->__getLastResponseHeaders();//debug
echo "<pre style='background: purple;'>responseHeader: ".print_r($responseHeader, true)."</pre>";//debug
echo "<pre style='background: grey;'>cookies: ".print_r($client->_cookies, true)."</pre>";//debug
echo "<pre style='background: yellow;'>Result of 'AddToCart': ".print_r($result, true)."</pre>";//debug
// Set SOAP Cookies in PHP Session
$_SESSION['soapcookies'] = $client->_cookies;
// View Cart
$data = array(
"domain" => 'www.example.net'
);
$result = $client->__soapCall("GetCartContents", $data);
echo "<pre style='background: skyblue;'>Result of 'GetCartContents': ".print_r($result, true)."</pre>";//debug
?>
仅供引用,PHP 版本是 5.2.6
最佳答案
如果您的目标是尝试将事件用户 session 与 SOAP API 的特定交互联系起来,那么您的方法看起来是正确的。您在 session 中存储和设置 SOAP cookie 并通过 setCookie 恢复到 SOAP session 的方法也是可行的方法。
您的代码无法正常工作可能是由于线路上的错误:
$client->__setCookie($name[$k], $v);
需要:
$client->__setCookie($name, $v);
希望对您有所帮助。
关于php - 我怎样才能让 SoapClient 尊重 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13388613/
以下所有内容都在 Amazon EC2 中运行 几个月来我一直在使用 ExactTarget 的 API 发送电子邮件,但它在我的 QA 环境中停止工作了。以下所有代码在我的生产环境中都能正常工作。他
我需要将 PHP 的 SoapClient 与 myfile-ca.crt 一起使用。我如何告诉 SoapClient 构造函数使用客户端证书(crt 文件)? 我熟悉 php SoapClient,
我以这种方式向 WSDL 服务器发送请求: $soap = new SoapClient('WSDL_URI'); $soap->SomeFunction(array('Param1' => 123,
我正在使用带有 WSDL 的 PHP Soap 客户端来发送 SOAP 请求。 这就是我初始化 SoapClient 的方式: $options = [ "trace" => 1,
我正在拔头发。我尝试了很多不同的方法,但没有任何效果: 'localhost', 'proxy_port' => '8888' )); try { $test = new stdCl
这个问题在这里已经有了答案: Does this SOAP Fault mean what I think it means? (3 个答案) 关闭 8 年前。 除了这条错误信息,这里没什么可写的了
我正在尝试从运行该服务的同一台服务器上调用 Soap 客户端以进行测试。我的 WSDL 在:http://www.installittoday.com/api/server.php?wsdl我正在尝试
这个问题在这里已经有了答案: Does this SOAP Fault mean what I think it means? (3 个答案) 关闭 8 年前。 除了这条错误信息,这里没什么可写的了
我正在尝试从运行该服务的同一台服务器上调用 Soap 客户端以进行测试。我的 WSDL 在:http://www.installittoday.com/api/server.php?wsdl我正在尝试
我们需要连接的其中一个 WS 有 PHP 示例代码。他们为我们签署了 CSR ...所以我们现在有用于身份验证的私钥和证书。 他们建议将私钥和签名证书放入一个 .pem 文件,并在 PHP 中使用如下
我在 PhP 中有一个工作的soaprequest,我正在尝试创建一个需要相同调用的java程序,但是我真的很难找到在java中创建以下php代码的方法,我找到了许多网站解释java中的soap请求,
我创建新的 SoapClient $this->soap = new \SoapClient($this->wdls // WDLS with corect host , [ 'excepti
我有一个 Web 服务函数,它向 PHP 客户端返回一组项目。根据项目的数量,PHP 返回类型不同。如果函数返回一项,则 PHP 类型为 stdClass 如果函数返回多项,则 PHP 类型为 arr
我有一个 WSDL,它有一个需要属性的元素: Claim Element 就生成的 xml 而言,它应该如下所示:
我正在使用 SOAP 集成支付网关。当我使用 Wamp 调用服务功能时,它运行良好。但是在我的实时服务器上它给出了以下错误 - Class 'SoapClient' not found 我使用的代码是
我找到了许多关于 SoapClient 希望您如何在请求中设置属性的解释,但我就是找不到从响应中读取属性的方法。 例如,我的 SoapClient 响应中包含以下元素: ... JOWtest
当我发送以下请求时,出现“版本错误”异常。 上面的请求被转换成zend代码 $client = new zend_soap_client(null,
我是 web 服务的新手,我正在尝试使用 soapClient() 调用 web 服务,它生成的请求 XML 不是预期的格式 下面是请求XML的预期格式 MD
另一个 SOAP 问题 - 我有一个大的多维数组,当使用 print_r 时回显很好(例如,您可以看到所有数据)。当我使用 时出现问题 SOAPClient->__soapCall('Function
我最近从 PHP5.4 升级到 PHP7。天哪,这是一个变化,但这不是重点。 升级后我遇到了 SoapService 的问题。 这是我的 SoapRequest 在 PHP5.4 上的样子:
我是一名优秀的程序员,十分优秀!