当前位置:编程学习 > wap >>

WAP订购管理接口源程序(php版本)

答案:WAP订购接口其实很简单,用以前1.5的实现方法http post方式也可以实现。

思路很简单:程序作为http post服务器接收一个xml消息后,对消息体进行解析,进行入库操作(入库操作起不到实际作用,主要是为了对账,你完全可以不处理任何消息,而直接返回一个xml处理成功的包),然后向卓望返回一个处理结果的xml包。

代码供刚入门wap的php程序员学习,附源代码如下:

<?php
ob_start();
$isParseTransactionID=FALSE; //是否解析到
$isParseServiceID=FALSE; //是否解析到服务ID
$isParseMID=FALSE; //否解析到梦网ID
$isDestUser=FALSE; //否解析到普通用户的信息
$isParseActionID=FALSE; //用户操作码
$TransactionID=NULL; //事物ID
$ParseServiceID=NULL; //服务ID
$ParseMID=NULL; //梦网ID
$ParseActionID=NULL;
$ResultID=0; //处理结果。默认为成功
$data=$HTTP_RAW_POST_DATA;
writeFile("1.txt",$data);//写接收内容到文件
$parser=xml_parser_create(); //创建解析器实例
xml_set_element_handler($parser,"startElement","endElement"); //开始和结束时执行,函数自定义的
xml_set_character_data_handler($parser,"characterData"); //数据操作,函数自定义的
xml_parse($parser,$data,true); //解析器实例|数据|是否动送出最后的资料区段
xml_parser_free($parser); //释放解析器,以下进行数据库操作,判断定购关系,并返回给卓望处理结果
include_once "include/mysql.php";
$operator=new MySQL($host,$user,$passwd,$database);
$conn=$operator->Connect();
$SPServiceID="0000000111"; //服务ID
$datatime=date("Y-m-d H:i:s"); //得到当前日期
$sql = "select state from custom where mid ='$ParseMID' and service_id ='$SPServiceID'"; //查找是否定购了服务
$sql1 = "insert into custom values('$SPServiceID','$ParseMID','1','$datatime')"; //插入MID的订购记录
$sql5 = "update custom set state = '1' where mid ='$ParseMID' and service_id ='$SPServiceID'"; //MID取消该服务的订购的状态
$sql2 = "update custom set state = '2' where mid ='$ParseMID' and service_id ='$SPServiceID'"; //MID取消该服务的订购的状态
$sql3 = "update custom set state = '3' where mid ='$ParseMID' and service_id ='$SPServiceID'"; //MID激活该服务的订购状态
$sql4 = "update custom set state = '4' where mid ='$ParseMID' and service_id ='$SPServiceID'"; //暂停服务
switch($ParseActionID)
{
case 1: //开通服务
if(FindServiceID($ParseServiceID))
{//找到serviceid
if(FindMID($ParseMID))
{
$res=$operator->Query($sql,$conn);
$rows=$operator->getRowsTop($res);//取出顶层对象
if($rows[0]==1)//4007: MISC 同步开通服务,但SP 端已存在订购关系,且状态为开通
{
$ResultID = "4007";
}
if($rows[0]==2)
{
$res=$operator->Query($sql5,$conn);
$ResultID = "0";
}
}
else
{//没找到就插入
$operator->Query($sql1,$conn);
$ResultID = "0"; //0 : 成功开通
}
}
else //服务ID错误了
{//4004: 无效的serviceID
$ResultID = "4004";
}
break;




case 2:
if(FindServiceID($ParseServiceID))
{//取消服务,只要找到mid立刻让他取消
if(FindMID($ParseMID))
{
$res=$operator->Query($sql2,$conn);
$ResultID = "0";
}
else
{//4005: 无效的pseudocode
$ResultID = "4005";
}
}
else
{//4004: 无效的serviceID
$ResultID = "4004";
}
break;



case 3:
if(FindServiceID($ParseServiceID))
{
if(FindMID($ParseMID))
{
$res=$operator->Query($sql,$conn);
$rows=$operator->getRowsTop($res);//取出顶层对象
if($rows[0]==4)
{//激活成功
$operator->Query($sql3,$conn);
$ResultID = "0";
}
else
{//4015: MISC 同步激活服务, 但SP 端已存在订购关系, 且状态为开通
$ResultID = "4015";
}
}
else
{//无效的pseudocode
$ResultID = "4005";
}
}
else
{//4004: 无效的serviceID
$ResultID = "4004";
}
break;
case 4:
if(FindServiceID($ParseServiceID))
{
if(FindMID($ParseMID))
{
$res=$operator->Query($sql,$conn);
$rows=$operator->getRowsTop($res);//取出顶层对象
if($rows[0]==4)
{
$ResultID = "4014";
}
else
{//MISC 同步暂停服务, 但SP 端已存在订购关系, 且状态为暂停
$operator->Query($sql4,$conn);
$ResultID = "0";
}
}
else
{
$ResultID = "4005";
}
}
else
{
//4004: 无效的serviceID
$ResultID = "4004";
}
break;
default:
$ResultID="4001";
}
$operator->Close($conn);
$XMLData='
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/";>

'">http://www.monternet.com/dsmp/schemas/";>';
$XMLData.="$TransactionID";
$XMLData.='



1.5.0
SyncOrderRelationResp
'.$ResultID.'


';
$XMLData=trim($XMLData);
$length = strlen($XMLData);
writeFile("2.txt",$XMLData);
header('Connection: close');
header('Content-Length:'.$length);
header('Content-Type: text/xml');
header('Date: '.date('r'));
echo $XMLData;
function FindServiceID($sid)
{ //查找本项业务是

[page_break] 否存在
global $SPServiceID;
if($sid == "$SPServiceID")
return 1;
else
return 0;
}
function FindMID($mid)
{
global $operator;
global $conn;
global $sql;
$res=$operator->Query($sql,$conn);
$rowno=$operator->getRowsNum($res);
if($rowno==0)
return 0;
else
return 1;
}
function startElement($parser_instance,$element_name,$attrs){
global $isParseTransactionID,$isParseServiceID,$isParseMID,$isParseActionID,$isDestUser;
switch($element_name){
case "TRANSACTIONID":
$isParseTransactionID=TRUE; //如果解析到$TransactionID,将内容保留
break;
case "SPSERVICEID":
$isParseServiceID=TRUE;
break;
case "DESTUSER_ID":
$isDestUser=TRUE;
break;
case "ACTIONID":
$isParseActionID=TRUE;
break;
case "PSEUDOCODE":
if($isDestUser)
{
$isParseMID=TRUE;
$isDestUser=FALSE;
}
break;
}
}
function characterData($parser_instance,$xml_data){
global $TransactionID,$ParseServiceID,$ParseMID,$ParseActionID; //事物ID
global $isParseTransactionID,$isParseServiceID,$isParseMID,$isParseActionID,$isDestUser;
if($isParseMID)
{
$ParseMID=$xml_data; //梦网ID
$isParseMID=FALSE;
}
if($isParseTransactionID)
{
$TransactionID=$xml_data;
$isParseTransactionID=FALSE;
}
if($isParseServiceID) //服务ID
{
$ParseServiceID=$xml_data;
$isParseServiceID=FALSE;
}
if($isParseActionID) //操作码
{
$ParseActionID=$xml_data;
$isParseActionID=FALSE;
}
}
function endElement($parser_instance,$element_name){
}
function writeFile($filename,$data){
$fd = fopen( $filename, "w+" );
fwrite($fd,$data,1400);
fclose( $fd );
}
ob_end_flush();
?>

上一页  [1] [2] 

上一个:Perl与WAP-程序举例
下一个:WAP与PHP - 进阶篇 之一

更多图片编程知识:
更多wap疑问解答:
为什么程序都退出了还可以收到推送?如果大多设备都可以推送那运营商怎么办?
qt 4.7 sqlserver2000 存储过程调用
Android FrameBuffer读屏幕30秒后mmap失败
联通粗定位用java程序如何来请求和接受数据
为什么QT运行Android平台的程序时,mouseMoveEvent事件响应的间隔时间很长??????????
android与PC蓝牙通讯
指定大小的label 内容可变,如果内容超出label的宽度,将未能显示的部分显示在另一个label上
android如何通过wifi连接无线打印机
运行程序,release目录下产生一个乱码文件夹
分享个某机构最新安卓资料,自己验证了
求助:QT5.0 没有QPrinter吗
直接调用 openmax IL 做 h264 解码, 有人会吗?
android在锁屏界面之上添加一个View
Bada模拟器如何访问pc机上的web
18396828106@163.com
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,