平安银行支付接口 PHP ECSHOP

来源:互联网 发布:蜂窝数据应用找不到 编辑:程序博客网 时间:2024/05/07 01:51
<?php/** * ECSHOP 平安银行支付 */if (!defined('IN_ECS')){die('Hacking attempt');}$payment_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/payment/pinganpay.php';if (file_exists($payment_lang)){global $_LANG;include_once($payment_lang);}/* 模块的基本信息 */if (isset($set_modules) && $set_modules == TRUE){$i = isset($modules) ? count($modules) : 0;/* 代码 */$modules[$i]['code']    = basename(__FILE__, '.php');/* 描述对应的语言项 */$modules[$i]['desc']    = 'pinganpay_desc';/* 是否支持货到付款 */$modules[$i]['is_cod']  = '0';/* 是否支持在线支付 */$modules[$i]['is_online']  = '1';/* 作者 */$modules[$i]['author']  = 'zhongyi';/* 网址 */$modules[$i]['website'] = 'http://www.pingan.com/';/* 版本号 */$modules[$i]['version'] = 'v1.0';/* 配置信息 */$modules[$i]['config']  = array(array('name' => 'masterId', 'type' => 'text', 'value' => '2000311146'),// array('name' => 'yp_key',     'type' => 'text', 'value' => ''),);return;}/** * 类 */class pinganpay{//notify和returnurl的具体值自行填写private $notify_url = 'includes/modules/payment/pingan/notify.php';private $return_url = 'includes/modules/payment/pingan/return.php';private $gateway = '';//测试提交地址private $merchantCertFile =" ";private $tTrustPayCertFile =" ";function pinganpay(){$this->gateway='https://ebank.sdb.com.cn/khpayment/khPayment.do';//正式提交地址$this->tTrustPayCertFile = ROOT_PATH.'includes/modules/payment/pingan/paygate.cer';$this->gateway='https://testebank.sdb.com.cn/khpayment/khPayment.do';//测试提交地址$this->merchantCertFile =ROOT_PATH."includes/modules/payment/pingan/2000311146.pfx";$this->tTrustPayCertFile = ROOT_PATH.'includes/modules/payment/pingan/paygate1.cer';}function __construct(){$this->pinganpay();}/** * 生成支付代码 * @param   array   $order  订单信息 * @param   array   $payment    支付方式信息 */function get_code($order, $payment){$masterId = $payment['masterId'];if(!$masterId)$masterId = '2000311146';if($masterId!=='2000311146'){//测试环境$this->gateway='https://ebank.sdb.com.cn/khpayment/khPayment.do';//正式提交地址$this->merchantCertFile =ROOT_PATH."includes/modules/payment/pingan/".$masterId.".pfx";}if(!file_exists($this->merchantCertFile)){exit('商户生产证书不存在');}$data_order_id    = $order['order_sn'];$data_amount      = $order['order_amount'];$return_url  = return_url(basename(__FILE__, '.php'));$data = array(            'masterId' =>$masterId,    'orderId' => $masterId .$data_order_id. rand(100, 999),            'currency' => 'RMB',            'amount' => $data_amount,            'objectName' => $data_order_id,//描述            'paydate' => date('YmdHis', time()),            'remark' => '',            'validtime' => '0',);$data = $this->_getData($data);//获取orig和signlist($orig, $sign) = $this->_getOrigAndSing($this->merchantCertFile, $data);$parameter = array(            'orig' => $orig,            'sign' => $sign,//  'returnurl' => $GLOBALS['ecs']->url() .$this->return_url,'returnurl' => $return_url,            'NOTIFYURL' => $GLOBALS['ecs']->url() .$this->notify_url,);$html = '<form method="post" name="P_FORM" action="' . $this->gateway . '">';foreach ($parameter as $key => $val) {$html .= "<input type='hidden' name='$key' value='$val' />";}$html.= "<input type='submit' value='" . $GLOBALS['_LANG']['pay_button'] . "'>";$html .= '</form>';return $html;}/** * 响应操作 */function respond(){$payment        = get_payment('pinganpay');$masterId    = $payment['masterId'];       // 获取商户编号$masterId = $payment['masterId'];if(!$masterId)$masterId = '2000311146';if($masterId!=='2000311146'){//测试环境$this->tTrustPayCertFile = ROOT_PATH.'includes/modules/payment/pingan/paygate.cer';}$orig = $_POST['orig'];$sign = $_POST['sign'];require_once 'pingan/pingan.php';$pingan = new pingan();//进行数据转码$orig = $pingan->_base64_url_decode($orig);$sign = $pingan->_base64_url_decode($sign);//验证签名是否正确/* */$result = $pingan->validate($orig, $sign, $this->tTrustPayCertFile);if ($result){// return true;} else {//return false;}$v_result = false;//将xml数据转换成array$orig_data = $pingan->xml_to_array($orig);if($orig_data['status']=='01'){$v_result = true;$order_id = get_order_id_by_sn(substr($orig_data['orderId'],-16,13));/* 改变订单状态 */order_paid($order_id,2);}else{//exit('error');}//print_r($orig_data);//exit;return $v_result;}/** * 获取签名过后的原始数据orig和签名数据sign * @param file $merchantCertFile * @param string $data * @return list */private function _getOrigAndSing($merchantCertFile, $data){require_once 'pingan/pingan.php';$pingan = new pingan();$orig = $pingan->getOrig($data);$sign = $pingan->getSign($merchantCertFile, $data);return array($orig, $sign);}/** * 将数据组装为xml格式的数据 * @param array $data * @return string * * $data = '<kColl id="input" append="false"><field id="masterId" value="2000311146"/><field id="orderId" value="20003111462015060473550416"/><field id="currency" value="RMB"/><field id="amount" value="0.01"/><field id="objectName" value="��"/><field id="paydate" value="20150604143506"/><field id="remark" value="��"/><field id="validtime" value="0"/></kColl>'; */private function _getData($data){$xml_data = '<kColl id="input" append="false">';foreach ($data as $key => $value) {$xml_data .= '<field id="' . $key . '" value="' . $value . '"/>';}$xml_data .= '</kColl>';return $xml_data;}}  ?>

0 0