BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / linux / #3796同步于 1 周前
Linux机器人发帖

移动的MISC接口,PHP实现的SOAP解析的Provision计费平台。

jerrytian
1 周前镜像同步0 回复
帮公司做的东西,公司里除了业务处理以外也没什么价值了,其中有xml的解析接口,感兴趣的自己玩一玩吧。用得着的更好了。 <?php $debug = 1; //0 - no debug; //1 - simple debug; //2 - verbose debug; $mysql_host="localhost"; $mysql_user="mysql"; $mysql_password="mysql"; $mysql_database="users"; $mysql_table="users"; function connect_and_select_db() { global $mysql_host, $mysql_user, $mysql_password, $mysql_database; $mysql_link = mysql_connect($mysql_host, $mysql_user, $mysql_password) or die('Could not connect: ' . mysql_error()); mysql_select_db($mysql_database) or die('Could not select database'); } function close_db() { //mysql_close(); ; // the below is from php manual, becaose of it, i would better leave the above alone, do nothing: /*mysql_close() closes the connection to the MySQL server that's associated with the specified link identifier. If link_identifier isn't specified, the last opened link is used. Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution. */ /*Be careful when using multiple links to connect to same database (with same username). Unless you specify explicitly in mysql_connect() to create a new link, it will return an already open link. If that would be closed by mysql_close(), it will also (obviously) close the other connection, since the link is the same. Had lot of trouble figuring it out, since in <=4.3.6 there was a bug which didn't close the connection, but after the patch to >=4.3.7, all my application broke down because of a single script that did this.*/ } $log = ""; /******************************************************************************** 样本SOAP请求 sample.xml <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope 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/"> <SOAP-ENV:Header> <TransactionID xmlns="http://10.1.2.122/misc/dsmp.xsd">00110100037392</TransactionID> </SOAP-ENV:Header> <SOAP-ENV:Body> <SyncOrderRelationReq xmlns="http://10.1.2.122/misc/dsmp.xsd"> <Version>1.5.0</Version> <MsgType>SyncOrderRelationReq</MsgType> <Send_Address> <DeviceType>0</DeviceType> <DeviceID>0011</DeviceID> </Send_Address> <Dest_Address> <DeviceType>400</DeviceType> <DeviceID>0</DeviceID> </Dest_Address> <FeeUser_ID> <UserIDType>2</UserIDType> <MSISDN></MSISDN> <PseudoCode>00116000000286</PseudoCode> </FeeUser_ID> <DestUser_ID> <UserIDType>2</UserIDType> <MSISDN></MSISDN> <PseudoCode>00116000000286</PseudoCode> </DestUser_ID> <LinkID>SP</LinkID> <ActionID>1</ActionID> <ActionReasonID>1</ActionReasonID> <SPID>919102</SPID> <SPServiceID>0000000064</SPServiceID> <AccessMode>2</AccessMode> <FeatureStr></FeatureStr> </SyncOrderRelationReq> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ********************************************************************************/ /******************************************************************************* 利用浏览器POST数据的简单HTML页面,测试用。 <html> <body> <h1>Put your information here!</h1><br> <form name="go" method="post" action="provision.php"> Text :<br> <textarea name="provision" rows="30" cols="100"></textarea><br> <input name="enter" type="submit" value="go"> </form> </body> <html> ********************************************************************************/ if (!headers_sent()) { header("Content-type: text/html; charset=utf-8"); } if ($debug > 0) { /* $sample_file_name = dirname (__FILE__)."/"."sample.xml"; $sample_fp = fopen ($sample_file_name, "r"); $raw_provision_xml_data = fread ($sample_fp, filesize($sample_file_name)); fclose ($sample_fp); */ $raw_provision_xml_data = urldecode($HTTP_POST_VARS["provision"]); $raw_provision_xml_data = eregi_replace("[\/][\"]", "\"", $raw_provision_xml_data); $log .= $raw_provision_xml_data."\n"; } else { $raw_provision_xml_data = rawurldecode($HTTP_RAW_POST_DATA); } $SyncOrderRelationReq = array ("TransactionID" => "", "Version" => "", "MsgType" => "", "Send_Address" => array ("DeviceType" => "", "DeviceID" => ""), "Dest_Address" => array ("DeviceType" =>"", "DeviceID" =>""), "FeeUser_ID" => array ("UserIDType" => "", "MSISDN" => "", "PseudoCode" => ""), "DestUser_ID" => array ("UserIDType" => "", "MSISDN" => "", "PseudoCode" => ""), "LinkID" => "", "ActionID" => "", "ActionReasonID" => "", "SPID" => "", "SPServiceID" => "", "AccessMode" => "", "FeatureStr" => "" ); $xml_parser = xml_parser_create (); xml_parser_set_option ($xml_parser, XML_OPTION_CASE_FOLDING, 0); $current_xml_element = ""; $xml_element_array = array (); function start_element_handler ($xml_parser, $name, $attributes) { global $debug, $SyncOrderRelationReq, $current_xml_element, $xml_element_array, $log; array_push ($xml_element_array, $name); $current_xml_element = $name; if ($debug > 1) { $log .= "Parsering XML start tag \"".$current_xml_element."\" with its attributes as belows:\n"; for ($i = 0; $i < count ($attributes); $i++) { $log .= "Name: ".key ($attributes)." Value:".current($attributes)."\n"; next($attributes); } } else { ; } } function end_element_handler ($xml_parser, $name) { global $debug, $SyncOrderRelationReq, $current_xml_element, $xml_element_array, $log; array_pop ($xml_element_array); $current_xml_element = $name; if ($debug > 0) { if ($debug >1) { $log .= "Parsing XML end tag \"".$current_xml_element."\".\n"; } if (strcmp ($current_xml_element, "SyncOrderRelationReq") == 0) { $log .= "<".date ("Y-m-j G:i:s")."> SyncOrderRelationReq XML parsing done, the below is the result:\n"; for ($i = 0; $i < count ($SyncOrderRelationReq); $i++) { if (is_array (current ($SyncOrderRelationReq))) { $tmp_array = current ($SyncOrderRelationReq); for ($j = 0; $j < count ($tmp_array); $j++) { $log .= key ($SyncOrderRelationReq)."-->"; $log .= key ($tmp_array)."-->".current ($tmp_array)."\n"; next ($tmp_array); } } else { $log .= key ($SyncOrderRelationReq)."-->".current ($SyncOrderRelationReq)."\n"; } next($SyncOrderRelationReq); } } } else { ; } } function character_data_handler ($xml_parser, $data) { global $debug, $SyncOrderRelationReq, $current_xml_element, $xml_element_array, $log; $size = count ($xml_element_array); switch ($current_xml_element) { case "TransactionID": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["TransactionID"] = $data; } break; case "Version": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["Version"] = $data; } break; case "MsgType": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["MsgType"] = $data; } break; case "DeviceType": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { if (strcmp ("Send_Address", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["Send_Address"]["DeviceType"] = $data; } elseif (strcmp ("Dest_Address", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["Dest_Address"]["DeviceType"] = $data; } } break; case "DeviceID": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { if (strcmp ("Send_Address", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["Send_Address"]["DeviceID"] = $data; } elseif (strcmp ("Dest_Address", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["Dest_Address"]["DeviceID"] = $data; } } break; case "UserIDType": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { if (strcmp ("FeeUser_ID", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["FeeUser_ID"]["UserIDType"] = $data; } elseif (strcmp ("DestUser_ID", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["DestUser_ID"]["UserIDType"] = $data; } } break; case "MSISDN": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { if (strcmp ("FeeUser_ID", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["FeeUser_ID"]["MSISDN"] = $data; } elseif (strcmp ("DestUser_ID", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["DestUser_ID"]["MSISDN"] = $data; } } break; case "PseudoCode": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { if (strcmp ("FeeUser_ID", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["FeeUser_ID"]["PseudoCode"] = $data; } elseif (strcmp ("DestUser_ID", $xml_element_array[($size-2)] ) == 0) { $SyncOrderRelationReq["DestUser_ID"]["PseudoCode"] = $data; } } break; case "LinkID": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["LinkID"] = $data; } break; case "ActionID": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["ActionID"] = $data; } break; case "ActionReasonID": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["ActionReasonID"] = $data; } break; case "SPID": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["SPID"] = $data; } break; case "SPServiceID": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["SPServiceID"] = $data; } break; case "AccessMode": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["AccessMode"] = $data; } break; case "FeatureStr": if (strcmp ($current_xml_element, $xml_element_array[($size-1)] ) == 0) { $SyncOrderRelationReq["FeatureStr"] = $data; } break; default: ; } if ($debug > 1) { for ($i = 0; $i < count ($xml_element_array); $i++) { $log .= "\t\t\t".$xml_element_array[$i]."\n"; } } } /* function notation_decl_handler ($xml_parser, $notation_name, $base, $systemID, $publicID) { ; } function processing_instruction_handler ($xml_parser, $target, $data) { ; } function default_handler ($xml_parser, $data) { ; } */ xml_set_element_handler ($xml_parser,"start_element_handler", "end_element_handler"); xml_set_character_data_handler ($xml_parser, "character_data_handler"); /* xml_set_notation_decl_handler ($xml_parser, "notation_decl_handler"); xml_set_processing_instruction_handler ($xml_parser, "processing_instruction_handler"); xml_set_default_handler ($xml_parser, "default_handler"); */ if (!xml_parse ($xml_parser, $raw_provision_xml_data)) { sprintf ("<%s> XML error on line %d and column %d with error code %d and error string %s !\n", date("Y-m-j G:i:s"), xml_get_current_line_number ($xml_parser), xml_get_current_column_number ($xml_parser), xml_get_error_code ($xml_parser), xml_error_string (xml_get_error_code ($xml_parser))); $log .= "<".date("Y-m-j G:i:s")."> XML error on line ".xml_get_current_line_number ($xml_parser)." and column ".xml_get_current_column_number ($xml_parser)." with error code ".xml_get_error_code ($xml_parser)." and error string ".xml_error_string (xml_get_error_code ($xml_parser))." !\n"; $log .= "==================================================================================\n"; $log_fp = fopen ("provision.log", "a+"); fwrite ($log_fp, $log); fclose ($log_fp); exit (1); } /* TransactionID-->00110100037392 Version-->1.5.0 MsgType-->SyncOrderRelationReq Send_Address-->DeviceType-->0 Send_Address-->DeviceID-->0011 Dest_Address-->DeviceType-->400 Dest_Address-->DeviceID-->0 FeeUser_ID-->UserIDType-->2 FeeUser_ID-->MSISDN--> FeeUser_ID-->PseudoCode-->00116000000286 DestUser_ID-->UserIDType-->2 DestUser_ID-->MSISDN--> DestUser_ID-->PseudoCode-->00116000000286 LinkID-->SP ActionID-->1 ActionReasonID-->1 SPID-->919102 SPServiceID-->0000000064 AccessMode-->2 FeatureStr--> */ /* DROP TABLE IF EXISTS `users`; CREATE TABLE IF NOT EXISTS `users` ( `ID` bigint(20) unsigned NOT NULL auto_increment, `LoginDate` datetime NOT NULL default NULL, `LogoutDate` datetime default NULL, `TransactionID` varchar(100) default NULL, `Version` varchar(100) default NULL, `MsgType` varchar(100) default NULL, `Send_DeviceType` varchar(100) default NULL, `Send_DeviceID` varchar(100) default NULL, `Dest_DeviceType` varchar(100) default NULL, `Dest_DeviceID` varchar(100) default NULL, `Fee_UserIDType` varchar(100) default NULL, `Fee_MSISDN` varchar(100) default NULL, `Fee_PseudoCode` varchar(100) default NULL, `Dest_UserIDType` varchar(100) default NULL, `Dest_MSISDN` varchar(100) default NULL, `Dest_PseudoCode` varchar(100) default NULL, `LinkID` varchar(100) default NULL, `ActionID` varchar(100) default NULL, `ActionReasonID` varchar(100) default NULL, `SPID` varchar(100) default NULL, `SPServiceID` varchar(100) default NULL, `AccessMode` varchar(100) default NULL, `FeatureStr` varchar(100) default NULL, `Updated` varchar(10) default NULL, PRIMARY KEY (`ID`), KEY `TransactionID` (`TransactionID`,`Fee_MSISDN`,`Fee_PseudoCode`,`Dest_MSISDN`,`Dest_PseudoCode`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; */ function validate_version ($str) { $str = trim ($str); if ( strlen ($str) > 0) { return $str; } return 0; } function validate_acessmode ($str) { /* 服务的访问方式 1:WEB 2:WAP 3:SMS */ $str = trim ($str); if ( strlen ($str) ==1 && ereg("[1-3]{1}", $str)) { return $str; } return 0; } function validate_msgtype ($str) { $str = trim ($str); if ( strlen ($str) > 0) { return $str; } return 0; } function validate_actionid ($str) { /* 服务状态管理动作代码,具 体值如下: 1: 开通服务; 2: 停止服务; 3: 激活服务; 4: 暂停服务; */ $str = trim ($str); if ( strlen ($str) ==1 && ereg("[1-4]{1}", $str)) { return $str; } return 0; } function validate_action_reasonid ($str) { /* 产生服务状态管理动作原因 的代码,具体值如下: 1:用户发起行为 2:系统发起行为 3:扣费失败导致的服务取消 4:其他 */ $str = trim ($str); if ( strlen ($str) ==1 && ereg("[1-4]{1}", $str)) { return $str; } return 0; } function validate_transactionid ($str) { /* 移动没有提供格式说明,所以这里也没发验证有效性,删除首尾空符号原值返回。 */ $str = trim ($str); if ( strlen ($str) > 0) { return $str; } return 0; } function validate_deviceid ($str) { /* 移动没有提供格式说明,所以这里也没发验证有效性,删除首尾空符号原值返回。 */ $str = trim ($str); if ( strlen ($str) > 0) { return $str; } return 0; } function validate_devicetype($str) { /* 移动没有提供格式说明,所以这里也没发验证有效性,删除首尾空符号原值返回。 */ $str = trim ($str); if ( strlen ($str) > 0) { return $str; } return 0; } function validate_userid_type($str) { /* 用户标识 1 手机号码 2 伪码 */ $str = trim ($str); if ( strlen ($str) == 1 && ereg("[1-2]{1}", $str)) { return $str; } return 0; } function validate_user_msisdn ($str) { /* 用户11位手机号 */ $str = trim ($str); if ( strlen ($str) == 11 && ereg("13[0-9]{9}", $str)) { return $str; } return 0; } function validate_user_mid ($str) { /* 用户伪码,移动的说明格式为: XXXX+XXXXXXXXXX 前四位为省份(包括中央0999)的编号, 正则表达式中以此为依据过滤。 */ $str = trim ($str); if ( strlen ($str) == 14 && ereg("0(0|9)(0|1|2|3|9)(0|1|2|3|4|9)[0-9]{10}", $str)) { return $str; } return 0; } function validate_spid ($str) { /* SP ID,目前只要不为空且为纯数字即判断合法。 */ $str = trim ($str); if ( strlen ($str) > 0 && !ereg("[^0-9]", $str)) { return $str; } return 0; } function validate_sp_serviceid ($str) { /* SP Sevice_ID,长度为8(?)且为纯数字即判断合法。 */ $str = trim ($str); if ( strlen ($str) >0 && !ereg("[^0-9]", $str)) { return $str; } return 0; } function validate_linkid($str) { /* 移动没有提供格式说明,所以这里也没发验证有效性,删除首尾空符号原值返回。 */ $str = trim ($str); if ( strlen ($str) > 0) { return $str; } return 0; } function validate_featurestr($str) { /* 移动没有提供格式说明,所以这里也没发验证有效性,删除首尾空符号原值返回。 */ $str = trim ($str); if ( strlen ($str) > 0) { return $str; } return 0; } function get_user_current_status($mid, $sp_serviceid) { // 0 -> 数据库里没有用户记录。 // 其它可能返回值为: // 1 2 3 4 global $mysql_table; $mid = validate_user_mid ($mid); $sp_serviceid = validate_sp_serviceid ($sp_serviceid); connect_and_select_db(); $mysql_query = "select * from ".$mysql_table." where Fee_PseudoCode='".$mid."' and SPServiceID='".$sp_serviceid."' and Updated='yes'"; $mysql_result = mysql_query ($mysql_query); if ($mysql_row=mysql_fetch_array($mysql_result,MYSQL_ASSOC)) { $status = $mysql_row["ActionID"]; return $status; close_db(); } else { return 0; close_db(); } } function get_hret($SyncOrderRelationReq) { /* 0 : 成功 1 : 未知错误 2-99:保留 4000-4999 为DSMP 与SP 之间的接口消息中的错误代码: 4000: 无效的msgtype 4001: 无效的action_id; 4002: 无效的action_reasonid; 4003: 无效的SP ID 4004: 无效的serviceID 4005: 无效的pseudocode 4006: 无效的accessmode 4007: MISC 同步开通服务,但SP 端已存在订购关系,且状态为开通 4008: MISC 同步开通服务,且SP 端不存在订购关系,但开通服务失败 4009: MISC 同步开通服务,但SP 端已存在订购关系, 且状态为暂停 4010: MISC 同步停止服务, 且SP 端存在订购关系, 但取消服务失败 4011: MISC 同步停止服务, 但SP 端不存在订购关系 4012: MISC 同步暂停服务, 且SP 端存在订购关系, 但暂停服务失败 4013: MISC 同步暂停服务, 但SP 端不存在订购关系 4014: MISC 同步暂停服务, 但SP 端已存在订购关系, 且状态为暂停 4015: MISC 同步激活服务, 但SP 端已存在订购关系, 且状态为开通 4016: MISC 同步激活服务, 但SP 端不存在订购关系 4017: MISC 同步激活服务, 且SP 端存在订购关系, 但激活服务失败 */ global $mysql_table; connect_and_select_db(); $now = date("Y-m-j G:i:s"); $TransactionID = validate_transactionid($SyncOrderRelationReq["TransactionID"]); $Version = validate_version($SyncOrderRelationReq["Version"]); $MsgType = validate_msgtype($SyncOrderRelationReq["MsgType"]); $Send_DeviceType = validate_devicetype($SyncOrderRelationReq["Send_Address"]["DeviceType"]); $Send_DeviceID = validate_deviceid($SyncOrderRelationReq["Send_Address"]["DeviceID"]); $Dest_DeviceType = validate_devicetype($SyncOrderRelationReq["Dest_Address"]["DeviceType"]); $Dest_DeviceID = validate_deviceid($SyncOrderRelationReq["Dest_Address"]["DeviceID"]); $Fee_UserIDType = validate_userid_type($SyncOrderRelationReq["FeeUser_ID"]["UserIDType"]); $Fee_MSISDN = validate_user_msisdn($SyncOrderRelationReq["FeeUser_ID"]["MSISDN"]); $Fee_PseudoCode = validate_user_mid($SyncOrderRelationReq["FeeUser_ID"]["PseudoCode"]); $Dest_UserIDType = validate_userid_type($SyncOrderRelationReq["DestUser_ID"]["UserIDType"]); $Dest_MSISDN = validate_user_msisdn($SyncOrderRelationReq["DestUser_ID"]["MSISDN"]); $Dest_PseudoCode = validate_user_mid($SyncOrderRelationReq["DestUser_ID"]["PseudoCode"]); $LinkID = validate_linkid($SyncOrderRelationReq["LinkID"]); $ActionID = validate_actionid($SyncOrderRelationReq["ActionID"]); $ActionReasonID = validate_action_reasonid($SyncOrderRelationReq["ActionReasonID"]); $SPID = validate_spid($SyncOrderRelationReq["SPID"]); $SPServiceID = validate_sp_serviceid($SyncOrderRelationReq["SPServiceID"]); $AccessMode = validate_acessmode($SyncOrderRelationReq["AccessMode"]); $FeatureStr = validate_featurestr($SyncOrderRelationReq["FeatureStr"]); if (!$MsgType) { return 4000; } elseif (!$ActionID) { return 4001; } elseif (!$ActionReasonID) { return 4002; } elseif (!$SPID) { return 4003; } elseif (!$SPServiceID) { return 4004; } elseif (!$Fee_PseudoCode) { return 4005; } elseif (!$AccessMode) { return 4006; } else { $user_current_service_status = intval (get_user_current_status($Fee_PseudoCode, $SPServiceID)); switch ($user_current_service_status) { case 0: //尚无定购关系 switch ($ActionID) { case 1: $mysql_query = "insert into ".$mysql_table." ( LoginDate, ". "TransactionID, ". "Version, ". "MsgType, ". "Send_DeviceType, ". "Send_DeviceID, ". "Dest_DeviceType, ". "Dest_DeviceID, ". "Fee_UserIDType, ". "Fee_MSISDN, ". "Fee_PseudoCode, ". "Dest_UserIDType, ". "Dest_MSISDN, ". "Dest_PseudoCode, ". "LinkID, ". "ActionID, ". "ActionReasonID, ". "SPID, ". "SPServiceID, ". "AccessMode, ". "FeatureStr, ". "Updated ) ". "values ( '".$now."', ". "'".$TransactionID."', ". "'".$Version."', ". "'".$MsgType."', ". "'".$Send_DeviceType."', ". "'".$Send_DeviceID."', ". "'".$Dest_DeviceType."', ". "'".$Dest_DeviceID."', ". "'".$Fee_UserIDType."', ". "'".$Fee_MSISDN."', ". "'".$Fee_PseudoCode."', ". "'".$Dest_UserIDType."', ". "'".$Dest_MSISDN."', ". "'".$Dest_PseudoCode."', ". "'".$LinkID."', ". "'".$ActionID."', ". "'".$ActionReasonID."', ". "'".$SPID."', ". "'".$SPServiceID."', ". "'".$AccessMode."', ". "'".$FeatureStr."', ". "'yes' ) "; if (mysql_query ($mysql_query)) { return 0; } else { return 4008; //4008: MISC 同步开通服务,且SP 端不存在订购关系,但开通服务失败 } break; case 2: return 4011; //4011: MISC 同步停止服务, 但SP 端不存在订购关系 break; case 3: return 4016; //4016: MISC 同步激活服务, 但SP 端不存在订购关系 break; case 4: return 4013; //4013: MISC 同步暂停服务, 但SP 端不存在订购关系 break; default: return 1; } break; case 1: //已有定购关系,且服务在开通中 switch ($ActionID) { case 1; return 4007; break; case 2: //先标志以前的同步记录Updated属性为'no'。 $mysql_query = "update ".$mysql_table." set Updated='no' where Fee_PseudoCode='".$Fee_PseudoCode."' and SPServiceID='".$SPServiceID."'"; //再将新的交易信息录入。 if (!mysql_query ($mysql_query)) { return 4010; //4010: MISC 同步停止服务, 且SP 端存在订购关系, 但取消服务失败 } $mysql_query = "insert into ".$mysql_table." ( LogoutDate, ". "TransactionID, ". "Version, ". "MsgType, ". "Send_DeviceType, ". "Send_DeviceID, ". "Dest_DeviceType, ". "Dest_DeviceID, ". "Fee_UserIDType, ". "Fee_MSISDN, ". "Fee_PseudoCode, ". "Dest_UserIDType, ". "Dest_MSISDN, ". "Dest_PseudoCode, ". "LinkID, ". "ActionID, ". "ActionReasonID, ". "SPID, ". "SPServiceID, ". "AccessMode, ". "FeatureStr, ". "Updated ) ". "values ( '".$now."', ". "'".$TransactionID."', ". "'".$Version."', ". "'".$MsgType."', ". "'".$Send_DeviceType."', ". "'".$Send_DeviceID."', ". "'".$Dest_DeviceType."', ". "'".$Dest_DeviceID."', ". "'".$Fee_UserIDType."', ". "'".$Fee_MSISDN."', ". "'".$Fee_PseudoCode."', ". "'".$Dest_UserIDType."', ". "'".$Dest_MSISDN."', ". "'".$Dest_PseudoCode."', ". "'".$LinkID."', ". "'".$ActionID."', ". "'".$ActionReasonID."', ". "'".$SPID."', ". "'".$SPServiceID."', ". "'".$AccessMode."', ". "'".$FeatureStr."', ". "'yes' ) "; if (mysql_query ($mysql_query)) { return 0; } else { return 4010; //4010: MISC 同步停止服务, 且SP 端存在订购关系, 但取消服务失败 } break; case 3: return 4015; //4015: MISC 同步激活服务, 但SP 端已存在订购关系, 且状态为开通 break; case 4: //先标志以前的同步记录Updated属性为'no'。 $mysql_query = "update ".$mysql_table." set Updated='no' where Fee_PseudoCode='".$Fee_PseudoCode."' and SPServiceID='".$SPServiceID."'"; //再将新的交易信息录入。 if (!mysql_query ($mysql_query)) { return 4012; //4012: MISC 同步暂停服务, 且SP 端存在订购关系, 但暂停服务失败 } $mysql_query = "insert into ".$mysql_table." ( LogoutDate, ". "TransactionID, ". "Version, ". "MsgType, ". "Send_DeviceType, ". "Send_DeviceID, ". "Dest_DeviceType, ". "Dest_DeviceID, ". "Fee_UserIDType, ". "Fee_MSISDN, ". "Fee_PseudoCode, ". "Dest_UserIDType, ". "Dest_MSISDN, ". "Dest_PseudoCode, ". "LinkID, ". "ActionID, ". "ActionReasonID, ". "SPID, ". "SPServiceID, ". "AccessMode, ". "FeatureStr, ". "Updated ) ". "values ( '".$now."', ". "'".$TransactionID."', ". "'".$Version."', ". "'".$MsgType."', ". "'".$Send_DeviceType."', ". "'".$Send_DeviceID."', ". "'".$Dest_DeviceType."', ". "'".$Dest_DeviceID."', ". "'".$Fee_UserIDType."', ". "'".$Fee_MSISDN."', ". "'".$Fee_PseudoCode."', ". "'".$Dest_UserIDType."', ". "'".$Dest_MSISDN."', ". "'".$Dest_PseudoCode."', ". "'".$LinkID."', ". "'".$ActionID."', ". "'".$ActionReasonID."', ". "'".$SPID."', ". "'".$SPServiceID."', ". "'".$AccessMode."', ". "'".$FeatureStr."', ". "'yes' ) "; if (mysql_query ($mysql_query)) { return 0; } else { return 4012; //4012: MISC 同步暂停服务, 且SP 端存在订购关系, 但暂停服务失败 } break; default: return 1; } break; case 2: // 目前为退订状态,虽然数据库中有记录,但实际上不存在定购关系。 switch ($ActionID) { case 1: //先标志以前的同步记录Updated属性为'no'。 $mysql_query = "update ".$mysql_table." set Updated='no' where Fee_PseudoCode='".$Fee_PseudoCode."' and SPServiceID='".$SPServiceID."'"; //再将新的交易信息录入。 if (!mysql_query ($mysql_query)) { return 1; } $mysql_query = "insert into ".$mysql_table." ( LoginDate, ". "TransactionID, ". "Version, ". "MsgType, ". "Send_DeviceType, ". "Send_DeviceID, ". "Dest_DeviceType, ". "Dest_DeviceID, ". "Fee_UserIDType, ". "Fee_MSISDN, ". "Fee_PseudoCode, ". "Dest_UserIDType, ". "Dest_MSISDN, ". "Dest_PseudoCode, ". "LinkID, ". "ActionID, ". "ActionReasonID, ". "SPID, ". "SPServiceID, ". "AccessMode, ". "FeatureStr, ". "Updated ) ". "values ( '".$now."', ". "'".$TransactionID."', ". "'".$Version."', ". "'".$MsgType."', ". "'".$Send_DeviceType."', ". "'".$Send_DeviceID."', ". "'".$Dest_DeviceType."', ". "'".$Dest_DeviceID."', ". "'".$Fee_UserIDType."', ". "'".$Fee_MSISDN."', ". "'".$Fee_PseudoCode."', ". "'".$Dest_UserIDType."', ". "'".$Dest_MSISDN."', ". "'".$Dest_PseudoCode."', ". "'".$LinkID."', ". "'".$ActionID."', ". "'".$ActionReasonID."', ". "'".$SPID."', ". "'".$SPServiceID."', ". "'".$AccessMode."', ". "'".$FeatureStr."', ". "'yes' ) "; if (mysql_query ($mysql_query)) { return 0; } else { return 4008; //4008: MISC 同步开通服务,且SP 端不存在订购关系,但开通服务失败 } case 2: return 4011; //4011: MISC 同步停止服务, 但SP 端不存在订购关系 break; case 3: return 4016; //4016: MISC 同步激活服务, 但SP 端不存在订购关系 break; case 4: return 4013; //4013: MISC 同步暂停服务, 但SP 端不存在订购关系 break; default: return 1; } break; case 3: // 已存在定购关系,且现在的状态为激活。 switch ($ActionID) { case 1: return 4007; //4007: MISC 同步开通服务,但SP 端已存在订购关系,且状态为开通 break; case 2: //先标志以前的同步记录Updated属性为'no'。 $mysql_query = "update ".$mysql_table." set Updated='no' where Fee_PseudoCode='".$Fee_PseudoCode."' and SPServiceID='".$SPServiceID."'"; //再将新的交易信息录入。 if (!mysql_query ($mysql_query)) { return 4010; //4010: MISC 同步停止服务, 且SP 端存在订购关系, 但取消服务失败 } $mysql_query = "insert into ".$mysql_table." ( LogoutDate, ". "TransactionID, ". "Version, ". "MsgType, ". "Send_DeviceType, ". "Send_DeviceID, ". "Dest_DeviceType, ". "Dest_DeviceID, ". "Fee_UserIDType, ". "Fee_MSISDN, ". "Fee_PseudoCode, ". "Dest_UserIDType, ". "Dest_MSISDN, ". "Dest_PseudoCode, ". "LinkID, ". "ActionID, ". "ActionReasonID, ". "SPID, ". "SPServiceID, ". "AccessMode, ". "FeatureStr, ". "Updated ) ". "values ( '".$now."', ". "'".$TransactionID."', ". "'".$Version."', ". "'".$MsgType."', ". "'".$Send_DeviceType."', ". "'".$Send_DeviceID."', ". "'".$Dest_DeviceType."', ". "'".$Dest_DeviceID."', ". "'".$Fee_UserIDType."', ". "'".$Fee_MSISDN."', ". "'".$Fee_PseudoCode."', ". "'".$Dest_UserIDType."', ". "'".$Dest_MSISDN."', ". "'".$Dest_PseudoCode."', ". "'".$LinkID."', ". "'".$ActionID."', ". "'".$ActionReasonID."', ". "'".$SPID."', ". "'".$SPServiceID."', ". "'".$AccessMode."', ". "'".$FeatureStr."', ". "'yes' ) "; if (mysql_query ($mysql_query)) { return 0; } else { return 4010; //4010: MISC 同步停止服务, 且SP 端存在订购关系, 但取消服务失败 } break; case 3: return 4015; //4015: MISC 同步激活服务, 但SP 端已存在订购关系, 且状态为开通 break; case 4: //先标志以前的同步记录Updated属性为'no'。 $mysql_query = "update ".$mysql_table." set Updated='no' where Fee_PseudoCode='".$Fee_PseudoCode."' and SPServiceID='".$SPServiceID."'"; //再将新的交易信息录入。 if (!mysql_query ($mysql_query)) { return 4012; //4012: MISC 同步暂停服务, 且SP 端存在订购关系, 但暂停服务失败 } $mysql_query = "insert into ".$mysql_table." ( LogoutDate, ". "TransactionID, ". "Version, ". "MsgType, ". "Send_DeviceType, ". "Send_DeviceID, ". "Dest_DeviceType, ". "Dest_DeviceID, ". "Fee_UserIDType, ". "Fee_MSISDN, ". "Fee_PseudoCode, ". "Dest_UserIDType, ". "Dest_MSISDN, ". "Dest_PseudoCode, ". "LinkID, ". "ActionID, ". "ActionReasonID, ". "SPID, ". "SPServiceID, ". "AccessMode, ". "FeatureStr, ". "Updated ) ". "values ( '".$now."', ". "'".$TransactionID."', ". "'".$Version."', ". "'".$MsgType."', ". "'".$Send_DeviceType."', ". "'".$Send_DeviceID."', ". "'".$Dest_DeviceType."', ". "'".$Dest_DeviceID."', ". "'".$Fee_UserIDType."', ". "'".$Fee_MSISDN."', ". "'".$Fee_PseudoCode."', ". "'".$Dest_UserIDType."', ". "'".$Dest_MSISDN."', ". "'".$Dest_PseudoCode."', ". "'".$LinkID."', ". "'".$ActionID."', ". "'".$ActionReasonID."', ". "'".$SPID."', ". "'".$SPServiceID."', ". "'".$AccessMode."', ". "'".$FeatureStr."', ". "'yes' ) "; if (mysql_query ($mysql_query)) { return 0; } else { return 4012; //4012: MISC 同步暂停服务, 且SP 端存在订购关系, 但暂停服务失败 } break; default: return 1; } break; case 4: // 存在用户定购关系,现在为暂停服务状态。 switch ($ActionID) { case 1: return 4009; //4009: MISC 同步开通服务,但SP 端已存在订购关系, 且状态为暂停 break; case 2: return 4010; //4010: MISC 同步停止服务, 且SP 端存在订购关系, 但取消服务失败 break; case 3: //先标志以前的同步记录Updated属性为'no'。 $mysql_query = "update ".$mysql_table." set Updated='no' where Fee_PseudoCode='".$Fee_PseudoCode."' and SPServiceID='".$SPServiceID."'"; //再将新的交易信息录入。 if (!mysql_query ($mysql_query)) { return 4017; //4017: MISC 同步激活服务, 且SP 端存在订购关系, 但激活服务失败 } $mysql_query = "insert into ".$mysql_table." ( LoginDate, ". "TransactionID, ". "Version, ". "MsgType, ". "Send_DeviceType, ". "Send_DeviceID, ". "Dest_DeviceType, ". "Dest_DeviceID, ". "Fee_UserIDType, ". "Fee_MSISDN, ". "Fee_PseudoCode, ". "Dest_UserIDType, ". "Dest_MSISDN, ". "Dest_PseudoCode, ". "LinkID, ". "ActionID, ". "ActionReasonID, ". "SPID, ". "SPServiceID, ". "AccessMode, ". "FeatureStr, ". "Updated ) ". "values ( '".$now."', ". "'".$TransactionID."', ". "'".$Version."', ". "'".$MsgType."', ". "'".$Send_DeviceType."', ". "'".$Send_DeviceID."', ". "'".$Dest_DeviceType."', ". "'".$Dest_DeviceID."', ". "'".$Fee_UserIDType."', ". "'".$Fee_MSISDN."', ". "'".$Fee_PseudoCode."', ". "'".$Dest_UserIDType."', ". "'".$Dest_MSISDN."', ". "'".$Dest_PseudoCode."', ". "'".$LinkID."', ". "'".$ActionID."', ". "'".$ActionReasonID."', ". "'".$SPID."', ". "'".$SPServiceID."', ". "'".$AccessMode."', ". "'".$FeatureStr."', ". "'yes' ) "; if (mysql_query ($mysql_query)) { return 0; } else { return 4017; //4017: MISC 同步激活服务, 且SP 端存在订购关系, 但激活服务失败 } break; case 4: return 4014; //4014: MISC 同步暂停服务, 但SP 端已存在订购关系, 且状态为暂停 break; default: return 1; } break; default: return 1; } } } $log .="<".date("Y-m-j G:i:s")."> XML SyncOrderRelationResponse constructed as below:\n"; $hret = get_hret ($SyncOrderRelationReq); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; $log .= "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; echo "<SOAP-ENV:Envelope 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/\">\n"; $log .= "<SOAP-ENV:Envelope 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/\">\n"; echo "<SOAP-ENV:Header>\n"; $log .= "<SOAP-ENV:Header>\n"; echo "<TransactionID xmlns=\"http://www.monternet.com/dsmp/schemas/\">".$SyncOrderRelationReq["TransactionID"]."</TransactionID>\n"; $log .= "<TransactionID xmlns=\"http://www.monternet.com/dsmp/schemas/\">".$SyncOrderRelationReq["TransactionID"]."</TransactionID>\n"; echo "</SOAP-ENV:Header>\n"; $log .= "</SOAP-ENV:Header>\n"; echo "<SOAP-ENV:Body>\n"; $log .= "<SOAP-ENV:Body>\n"; echo "<SyncOrderRelationResp xmlns=\"http://www.monternet.com/dsmp/schemas/\">\n"; $log .= "<SyncOrderRelationResp xmlns=\"http://www.monternet.com/dsmp/schemas/\">\n"; echo "<Version>1.5.0</Version>\n"; $log .= "<Version>1.5.0</Version>\n"; echo "<MsgType>SyncOrderRelationResp</MsgType>\n"; $log .= "<MsgType>SyncOrderRelationResp</MsgType>\n"; echo "<hRet>".$hret."</hRet>\n"; $log .= "<hRet>".$hret."</hRet>\n"; echo "</SyncOrderRelationResp>\n"; $log .= "</SyncOrderRelationResp>\n"; echo "</SOAP-ENV:Body>\n"; $log .= "</SOAP-ENV:Body>\n"; echo "</SOAP-ENV:Envelope>\n"; $log .= "</SOAP-ENV:Envelope>\n"; $log .= "==================================================================================\n"; $log_fp = fopen ("provision.log", "a+"); fwrite ($log_fp, $log); fclose ($log_fp); ?>
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。