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 端已存在订购关系,且状态为开通
  {
n $ResultID = "4007";
  }
  if($rows[0]==2)
  {
n $res=$operator->Query($sql5,$conn);
n $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();
  ?>

posted on 2007-11-10 11:31  林宁  阅读(358)  评论(0)    收藏  举报