|
源代码网推荐
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) { //查找本项业务是否存在 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(); ?>
源代码网供稿. |