php调用webservice soap 高手请进

wyg0508 2009-09-11 10:09:10
我要实现充值,接口http://service.48pt.com/Consumption/lasCharge.asmx
webservice
我要用PHP实现,
提交参数列表,在以下代码中,请高手帮忙

<?php
/*
* $Id: client1.php,v 1.3 2007/11/06 14:48:24 snichol Exp $
*
* Client sample that should get a fault response.
*
* Service: SOAP endpoint
* Payload: rpc/encoded
* Transport: http
* Authentication: none
*/
require_once('../lib/nusoap.php');
$client = new nusoap_client("http://service.48pt.com/Consumption/lasCharge.asmx");
$client->soap_defencoding = "UTF-8";

$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';
exit();
}
$client->setUseCurl($useCURL);
// This is an archaic parameter list
$params = array(
'PtAcc' => "sungfeng21",
'source' => 12,
'moneyType' => '1',
'merchantId' => '105',
'serverId' => '1201',
'serviceId' => '102',
'orderId' => '12345678912345678912345',
'curr' => 1,
'moneyAmount' => '1',
'amount' => '100',
'moneyList' => '100',
'pname' => '0',
'commodity' => '0',
'callTime' => '2009-09-11 09:33:25',
'userIP' => '127.0.0.1',
'serverIP' => '61.164.40.187'
);
$result = $client->call('UserAccountDealing', $params,'', '', false, true);
if ($client->fault) {
echo '<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>'; print_r($result); echo '</pre>';
} else {
$err = $client->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>';
}
}
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';
?>

帮忙写一下,怎么实现让接口返回数据呢,,,
我哪里方法错误了,谢谢各位
...全文
564 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoplay 2011-06-29
  • 打赏
  • 举报
回复
按照4楼得朋友给出的方法,我的提示logon failed 不知道是什么原因
SuperSir 2010-11-30
  • 打赏
  • 举报
回复
楼主! lib/nusoap.php 这个类文件从那里来的? 给传个吧!

supersir@live.cn 谢谢!
hello103 2010-08-06
  • 打赏
  • 举报
回复
得谢谢前面的人,我问题也解决了
wyg0508 2009-10-15
  • 打赏
  • 举报
回复
$ok_url ="http://service.48pt.com/Consumption/lasCharge.asmx";
$client = new SoapClient("".$ok_url."?WSDL");
$result = $client->UserAccountDealing(array("myAI" => $r));
$su = $result -> UserAccountDealingResult;

解决代码,顺便贴2个 根据IP地址判断城市天气预报的代码
http://blog.studclub.cn/post/236.html
xmice 2009-09-29
  • 打赏
  • 举报
回复
怎么解决的 也不说 ?
babysc1 2009-09-11
  • 打赏
  • 举报
回复
恩 楼上方法不错
foolbirdflyfirst 2009-09-11
  • 打赏
  • 举报
回复
实际上如果webservice能够连接成功,就可以直接调用函数,但是php调用.net的webservice方法有些问题,可能以下形式会比较好
$client = new SoapClient("http://service.48pt.com/Consumption/lasCharge.asmx?wsdl");
$params = array(
'PtAcc' => "sungfeng21",
'source' => 12,
'moneyType' => '1',
'merchantId' => '105',
'serverId' => '1201',
'serviceId' => '102',
'orderId' => '12345678912345678912345',
'curr' => 1,
'moneyAmount' => '1',
'amount' => '100',
'moneyList' => '100',
'pname' => '0',
'commodity' => '0',
'callTime' => '2009-09-11 09:33:25',
'userIP' => '127.0.0.1',
'serverIP' => '61.164.40.187'
);
$p = $client->__Call('UserAccountDealing',array('parameters'=>$params));//这里有些区别,要这么来调用。
print_r($p);
foolbirdflyfirst 2009-09-11
  • 打赏
  • 举报
回复
post个http头+xml body到webservice其实就是soap请求,原理都一样。
不过最好还是用soapclient吧,php5自带有一个SoapClient.
不知道你用nusoap,提示什么错误没有呢?如果调用函数没错误,返回post过去的参数列表,估计就是你post过去的参数有问题了。
wyg0508 2009-09-11
  • 打赏
  • 举报
回复
http://service.48pt.com/Consumption/lasCharge.asmx?op=UserAccountDealing
提供的操作列表
现在POST数据能过去,但是返回值错误,不知道是POST数据有问题还是什么

lasCharge

UserAccountDealing
Important: Account recharge (When the account does not exist, the Create Account).

测试
测试窗体只能用于来自本地计算机的请求。
SOAP 1.1
以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。

POST /Consumption/lasCharge.asmx HTTP/1.1
Host: service.48pt.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "WebGame.Consumption/UserAccountDealing"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<UserAccountDealing xmlns="WebGame.Consumption">
<myAI>
<PtAcc>string</PtAcc>
<source>int</source>
<moneyType>int</moneyType>
<merchantId>string</merchantId>
<serverId>string</serverId>
<serviceId>string</serviceId>
<orderId>string</orderId>
<curr>int</curr>
<moneyAmount>decimal</moneyAmount>
<amount>decimal</amount>
<moneyList>string</moneyList>
<pname>string</pname>
<commodity>string</commodity>
<callTime>string</callTime>
<userIP>string</userIP>
<serverIP>string</serverIP>
</myAI>
</UserAccountDealing>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<UserAccountDealingResponse xmlns="WebGame.Consumption">
<UserAccountDealingResult>int</UserAccountDealingResult>
</UserAccountDealingResponse>
</soap:Body>
</soap:Envelope>
SOAP 1.2
以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。

POST /Consumption/lasCharge.asmx HTTP/1.1
Host: service.48pt.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<UserAccountDealing xmlns="WebGame.Consumption">
<myAI>
<PtAcc>string</PtAcc>
<source>int</source>
<moneyType>int</moneyType>
<merchantId>string</merchantId>
<serverId>string</serverId>
<serviceId>string</serviceId>
<orderId>string</orderId>
<curr>int</curr>
<moneyAmount>decimal</moneyAmount>
<amount>decimal</amount>
<moneyList>string</moneyList>
<pname>string</pname>
<commodity>string</commodity>
<callTime>string</callTime>
<userIP>string</userIP>
<serverIP>string</serverIP>
</myAI>
</UserAccountDealing>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<UserAccountDealingResponse xmlns="WebGame.Consumption">
<UserAccountDealingResult>int</UserAccountDealingResult>
</UserAccountDealingResponse>
</soap12:Body>
</soap12:Envelope>
foolbirdflyfirst 2009-09-11
  • 打赏
  • 举报
回复
$client = new nusoap_client("http://service.48pt.com/Consumption/lasCharge.asmx");
改成以下试试
-->
$client = new nusoap_client("http://service.48pt.com/Consumption/lasCharge.asmx?wsdl");

我这边直接浏览http://service.48pt.com/Consumption/lasCharge.asmx发现ip未授权,没权限访问,不能帮你测试。
wyg0508 2009-09-11
  • 打赏
  • 举报
回复
差不多解决了,非常感谢
foolbirdflyfirst 这二天的帮忙

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧