欧飞手机充值接口php源代码v0.1

来源:互联网 发布:web服务器软件 编辑:程序博客网 时间:2024/04/30 05:02

最近需要在公司网站上做个手机充值功能,联系了好几个提供手机充值服务接口的商家最后选择了欧飞数卡,写了个欧飞的手机直充接口,可以支持全国移动,联通和电信手机的直充花费,现在公布我的代码给大家参考,希望可以帮助到有同样需求的朋友,也希望大家帮我挑下问题.

参考文档:OFCARD系统http接口协议(V5.3)

手机直充接口代码如下:(请参考代码注释进行修改)

<?php/** 欧飞接口v4.0服务控制* 参考:OFCARD系统http接口协议(V5.3)* 版本 :0.1* 作者:http://www.heui.org* 日期:20110219*/class ofcard_service {var $gateway ; //手机直充网关地址var $param ; //查询参数/*** 从配置文件及入口文件中初始化变量* @param string $cardnum 话费面值* @param string $order_id 订单号* @param string $game_userid 手机号* @param string $userid SP编码* @param string $userpws SP接入密码* @param string $version 欧飞接口版本(固定值为:4.0)* @todo 配置文件数组化*/function ofcard_service( $cardnum , $order_id , $game_userid , $userid , $userpws , $version ) {$this ->gateway = 'http://esales1.ofcard.com:8088/onlineorder.do ' ;$this ->param = array ();$this ->param[ 'userid' ] = $userid ;$this ->param[ 'userpws' ] = md5( $userpws );//$this->param['cardid'] = '140101';$this ->param[ 'cardid' ] = $this ->get_cardid( $game_userid );$this ->param[ 'cardnum' ] = $cardnum /50;$this ->param[ 'sporder_id' ] = $order_id ;$this ->param[ 'sporder_time' ] = date ( 'YmdHis' );$this ->param[ 'game_userid' ] = $game_userid ;$keystr = 'OFCARD' ;$this ->param[ 'md5_str' ] = strtoupper ( md5($this ->param[ 'userid' ].$this ->param[ 'userpws' ].$this ->param[ 'cardid' ].$this ->param[ 'cardnum' ].$this ->param[ 'sporder_id' ].$this ->param[ 'sporder_time' ].$game_userid . $keystr ) );$this ->param[ 'version' ] = $version ;}/*** 进行充值,使用snoopy提交* @param Snoopy $snoopy* @param ezSQL_mysql $db* @param string $order_id* @return 充值结果* @todo snoopy 集成*/function recharge( $snoopy , $db , $order_id ) {$snoopy ->submit( $this ->gateway, $this ->param);//下面数据库操作属于商家逻辑$sql = "UPDATE `recharge` SET `is_recharge` = " . $this ->get_xml_value( "game_state" , $snoopy ->results) . ", `ofcard_trade_id` = '" .$this ->get_xml_value( "orderid" , $snoopy ->results) . "', `purchase_price` = '" .$this ->get_xml_value( "ordercash" , $snoopy ->results) ."' WHERE `order_id` = " . $order_id ;$db ->query( $sql );return $this ->get_xml_value( "game_state" , $snoopy ->results);}/*** xml数据简单解析* @param string $name* @param string $xml* @return string $ret*/function get_xml_value( $name , $xml ){$ret = '' ;preg_match( "|<" . $name . ">(.*)</" . $name . ">|U" , $xml , $ret );return $ret [1];}/**** 获取充值状态* http://202.102.53.141:83/api/query.do?userid=xxxxx&spbillid=spxxxxxx* @param string $userid SP编码* @param string $spbillid 商户系统订单号* @return 充值状态*/function get_is_recharge( $userid , $spbillid ){$status_url = "http://202.102.53.141:83/api/query.do?userid= " . $userid . "&spbillid=" . $spbillid ;return file_get_contents ( $status_url );}/**** 获取账户余额* @param string $userid* @param string $userpws* @param string $version* @return 账户余额*/function get_leftcredit( $userid , $userpws , $version ){$url = "http://esales1.ofcard.com:8088/queryuserinfo.do?userid= " . $userid . "&userpws=" . md5( $userpws ) . "&version=" . $version ;return self::get_xml_value( "ret_leftcredit" , file_get_contents ( $url ));}/*** 是否可以充值(未进行余额判断)* @param string $phoneno* @param string $price* @param string $userid* @return bool 是否可以充值*/function is_recharge( $phoneno , $price , $userid ) {$url = "http://esales1.ofcard.com:8088/telcheck.do?phoneno= " . $phoneno . "&price=" . $price . "&userid=" . $userid ;$ret = split( '#' , file_get_contents ( $url ));return (1 == $ret [0]);}/**** 所需提货商品的编码* (现全国移动联通快充直充编码为且仅为140101,电信手机编码为且仅为18)* @param string $phoneno 手机号码* @todo 常量加入配置文件*/function get_cardid( $phoneno ) {$num = substr ( $phoneno , 0, 3);$ChinaMobile = array (134,135,147,147,136,137,138,139,150,151,152,182,157,158,159,187,188);$ChinaUnicom = array (130,131,132,155,156,145,185,186);$ChinaTelecom = array (133,153,180,189);if (in_array( $num , $ChinaMobile ) || in_array( $num , $ChinaUnicom )) {return '140101' ;}if (in_array( $num , $ChinaTelecom )) {return '18' ;}}}

手机直充接口使用如下:

$ofcard = new ofcard_service( $original_price , $dingdan , $mobile , $userid , $userpws , $version ); $ofcard ->recharge( $snoopy , $db , $dingdan );

原创粉丝点击