添加后台代理代码
This commit is contained in:
42
codes/agent/game/api/payment/unionpay/__init.php
Normal file
42
codes/agent/game/api/payment/unionpay/__init.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* [WEIZAN System] Copyright (c) 2014 012WZ.COM
|
||||
* WEIZAN is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
|
||||
include_once IA_ROOT . '/payment/unionpay/upacp_sdk_php/utf8/func/log.class.php';
|
||||
define('SDK_CVN2_ENC', 0);
|
||||
define('SDK_DATE_ENC', 0);
|
||||
define('SDK_PAN_ENC', 0);
|
||||
|
||||
define('SDK_FRONT_TRANS_URL', 'https://gateway.95516.com/gateway/api/frontTransReq.do');
|
||||
define('SDK_BACK_TRANS_URL', 'https://gateway.95516.com/gateway/api/backTransReq.do');
|
||||
define('SDK_BATCH_TRANS_URL', 'https://gateway.95516.com/gateway/api/batchTrans.do');
|
||||
define('SDK_SINGLE_QUERY_URL', 'https://gateway.95516.com/gateway/api/batchTrans.do');
|
||||
define('SDK_FILE_QUERY_URL', 'https://filedownload.95516.com/');
|
||||
define('SDK_Card_Request_Url', 'https://gateway.95516.com/gateway/api/cardTransReq.do');
|
||||
define('SDK_App_Request_Url', 'https://gateway.95516.com/gateway/api/appTransReq.do');
|
||||
|
||||
define('SDK_FRONT_NOTIFY_URL', $_W['siteroot'] . 'pay.php');
|
||||
define('SDK_BACK_NOTIFY_URL', $_W['siteroot'] . 'notify.php');
|
||||
define('SDK_FILE_DOWN_PATH', 0);
|
||||
define('SDK_LOG_FILE_PATH', IA_ROOT . '/data/logs/');
|
||||
if (!empty($_W['config']['setting']['development'])) {
|
||||
define('SDK_LOG_LEVEL', PhpLog::INFO);
|
||||
} else {
|
||||
define('SDK_LOG_LEVEL', PhpLog::OFF);
|
||||
}
|
||||
if (!file_exists(IA_ROOT . '/attachment/unionpay/PM_'.$_W['uniacid'].'_acp.pfx')) {
|
||||
message('缺少支付证书,请联系管理员!');
|
||||
}
|
||||
define('SDK_SIGN_CERT_PATH', IA_ROOT . '/attachment/unionpay/PM_'.$_W['uniacid'].'_acp.pfx');
|
||||
define('SDK_SIGN_CERT_PWD', $payment['signcertpwd']);
|
||||
define('SDK_ENCRYPT_CERT_PATH', IA_ROOT . '/attachment/unionpay/encrypt.cer');
|
||||
define('SDK_VERIFY_CERT_DIR', IA_ROOT . '/attachment/unionpay/');
|
||||
define('SDK_VERIFY_CERT_PATH', IA_ROOT . '/attachment/unionpay/verify_sign_acp.cer');
|
||||
define('SDK_MERID', $payment['merid']);
|
||||
|
||||
include_once IA_ROOT . '/payment/unionpay/upacp_sdk_php/utf8/func/common.php';
|
||||
include_once IA_ROOT . '/payment/unionpay/upacp_sdk_php/utf8/func/secureUtil.php';
|
||||
include_once IA_ROOT . '/payment/unionpay/upacp_sdk_php/utf8/func/PublicEncrypte.php';
|
||||
include_once IA_ROOT . '/payment/unionpay/upacp_sdk_php/utf8/func/PinBlock.php';
|
||||
69
codes/agent/game/api/payment/unionpay/notify.php
Normal file
69
codes/agent/game/api/payment/unionpay/notify.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/**
|
||||
* [Weizan System] Copyright (c) 2014 012WZ.COM
|
||||
* Weizan is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
error_reporting(0);
|
||||
define('IN_MOBILE', true);
|
||||
require '../../framework/bootstrap.inc.php';
|
||||
$_W['uniacid'] = $_POST['reqReserved'];
|
||||
|
||||
$setting = uni_setting($_W['uniacid'], array('payment'));
|
||||
if(!is_array($setting['payment'])) {
|
||||
exit('没有设定支付参数.');
|
||||
}
|
||||
$payment = $setting['payment']['unionpay'];
|
||||
require '__init.php';
|
||||
|
||||
if (!empty($_POST) && verify($_POST) && $_POST['respMsg'] == 'success') {
|
||||
$sql = 'SELECT * FROM ' . tablename('core_paylog') . ' WHERE `uniontid`=:uniontid';
|
||||
$params = array();
|
||||
$params[':uniontid'] = $_POST['orderId'];
|
||||
$log = pdo_fetch($sql, $params);
|
||||
if(!empty($log) && $log['status'] == '0') {
|
||||
$log['tag'] = iunserializer($log['tag']);
|
||||
$log['tag']['queryId'] = $_POST['queryId'];
|
||||
|
||||
$record = array();
|
||||
$record['status'] = 1;
|
||||
$record['tag'] = iserializer($log['tag']);
|
||||
pdo_update('core_paylog', $record, array('plid' => $log['plid']));
|
||||
if($log['is_usecard'] == 1 && $log['card_type'] == 1 && !empty($log['encrypt_code']) && $log['acid']) {
|
||||
load()->classs('coupon');
|
||||
$acc = new coupon($log['acid']);
|
||||
$codearr['encrypt_code'] = $log['encrypt_code'];
|
||||
$codearr['module'] = $log['module'];
|
||||
$codearr['card_id'] = $log['card_id'];
|
||||
$acc->PayConsumeCode($codearr);
|
||||
}
|
||||
if($log['is_usecard'] == 1 && $log['card_type'] == 2) {
|
||||
$now = time();
|
||||
$log['card_id'] = intval($log['card_id']);
|
||||
pdo_query('UPDATE ' . tablename('activity_coupon_record') . " SET status = 2, usetime = {$now}, usemodule = '{$log['module']}' WHERE uniacid = :aid AND couponid = :cid AND uid = :uid AND status = 1 LIMIT 1", array(':aid' => $_W['uniacid'], ':uid' => $log['openid'], ':cid' => $log['card_id']));
|
||||
}
|
||||
|
||||
$site = WeUtility::createModuleSite($log['module']);
|
||||
if(!is_error($site)) {
|
||||
$method = 'payResult';
|
||||
if (method_exists($site, $method)) {
|
||||
$ret = array();
|
||||
$ret['weid'] = $log['uniacid'];
|
||||
$ret['uniacid'] = $log['uniacid'];
|
||||
$ret['result'] = 'success';
|
||||
$ret['type'] = $log['type'];
|
||||
$ret['from'] = 'nofity';
|
||||
$ret['tid'] = $log['tid'];
|
||||
$ret['user'] = $log['openid'];
|
||||
$ret['fee'] = $log['fee'];
|
||||
$ret['tag'] = $log['tag'];
|
||||
$ret['is_usecard'] = $log['is_usecard'];
|
||||
$ret['card_type'] = $log['card_type'];
|
||||
$ret['card_fee'] = $log['card_fee'];
|
||||
$ret['card_id'] = $log['card_id'];
|
||||
$site->$method($ret);
|
||||
exit('success');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
exit('fail');
|
||||
105
codes/agent/game/api/payment/unionpay/pay.php
Normal file
105
codes/agent/game/api/payment/unionpay/pay.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
/**
|
||||
* [Weizan System] Copyright (c) 2014 012WZ.COM
|
||||
* Weizan is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
define('IN_MOBILE', true);
|
||||
require '../../framework/bootstrap.inc.php';
|
||||
require '../../app/common/bootstrap.app.inc.php';
|
||||
load()->app('common');
|
||||
load()->app('template');
|
||||
|
||||
$sl = $_GPC['ps'];
|
||||
$params = @json_decode(base64_decode($sl), true);
|
||||
|
||||
$setting = uni_setting($_W['uniacid'], array('payment'));
|
||||
if(!is_array($setting['payment'])) {
|
||||
exit('没有设定支付参数.');
|
||||
}
|
||||
$payment = $setting['payment']['unionpay'];
|
||||
require '__init.php';
|
||||
|
||||
if (!empty($_POST) && verify($_POST) && $_POST['respMsg'] == 'success') {
|
||||
$sql = 'SELECT * FROM ' . tablename('core_paylog') . ' WHERE `uniontid`=:uniontid';
|
||||
$params = array();
|
||||
$params[':uniontid'] = $_POST['orderId'];
|
||||
$log = pdo_fetch($sql, $params);
|
||||
if(!empty($log) && $log['status'] == '0') {
|
||||
$log['tag'] = iunserializer($log['tag']);
|
||||
$log['tag']['queryId'] = $_POST['queryId'];
|
||||
|
||||
$record = array();
|
||||
$record['status'] = 1;
|
||||
$record['tag'] = iserializer($log['tag']);
|
||||
pdo_update('core_paylog', $record, array('plid' => $log['plid']));
|
||||
if($log['is_usecard'] == 1 && $log['card_type'] == 1 && !empty($log['encrypt_code']) && $log['acid']) {
|
||||
load()->classs('coupon');
|
||||
$acc = new coupon($log['acid']);
|
||||
$codearr['encrypt_code'] = $log['encrypt_code'];
|
||||
$codearr['module'] = $log['module'];
|
||||
$codearr['card_id'] = $log['card_id'];
|
||||
$acc->PayConsumeCode($codearr);
|
||||
}
|
||||
if($log['is_usecard'] == 1 && $log['card_type'] == 2) {
|
||||
$now = time();
|
||||
$log['card_id'] = intval($log['card_id']);
|
||||
pdo_query('UPDATE ' . tablename('activity_coupon_record') . " SET status = 2, usetime = {$now}, usemodule = '{$log['module']}' WHERE uniacid = :aid AND couponid = :cid AND uid = :uid AND status = 1 LIMIT 1", array(':aid' => $_W['uniacid'], ':uid' => $log['openid'], ':cid' => $log['card_id']));
|
||||
}
|
||||
}
|
||||
$site = WeUtility::createModuleSite($log['module']);
|
||||
if(!is_error($site)) {
|
||||
$method = 'payResult';
|
||||
if (method_exists($site, $method)) {
|
||||
$ret = array();
|
||||
$ret['weid'] = $log['uniacid'];
|
||||
$ret['uniacid'] = $log['uniacid'];
|
||||
$ret['result'] = 'success';
|
||||
$ret['type'] = $log['type'];
|
||||
$ret['from'] = 'return';
|
||||
$ret['tid'] = $log['tid'];
|
||||
$ret['uniontid'] = $log['uniontid'];
|
||||
$ret['user'] = $log['openid'];
|
||||
$ret['fee'] = $log['fee'];
|
||||
$ret['tag'] = $log['tag'];
|
||||
$ret['is_usecard'] = $log['is_usecard'];
|
||||
$ret['card_fee'] = $log['card_fee'];
|
||||
$ret['card_id'] = $log['card_id'];
|
||||
$site->$method($ret);
|
||||
exit('success');
|
||||
}
|
||||
}
|
||||
}
|
||||
$sql = 'SELECT * FROM ' . tablename('core_paylog') . ' WHERE `plid`=:plid';
|
||||
$paylog = pdo_fetch($sql, array(':plid' => $params['tid']));
|
||||
if(!empty($paylog) && $paylog['status'] != '0') {
|
||||
exit('这个订单已经支付成功, 不需要重复支付.');
|
||||
}
|
||||
$auth = sha1($sl . $paylog['uniacid'] . $_W['config']['setting']['authkey']);
|
||||
if($auth != $_GPC['auth']) {
|
||||
exit('参数传输错误.');
|
||||
}
|
||||
$_W['openid'] = intval($paylog['openid']);
|
||||
|
||||
$params = array(
|
||||
'version' => '5.0.0',
|
||||
'encoding' => 'utf-8',
|
||||
'certId' => getSignCertId(),
|
||||
'txnType' => '01',
|
||||
'txnSubType' => '01',
|
||||
'bizType' => '000201',
|
||||
'frontUrl' => SDK_FRONT_NOTIFY_URL . '?i='.$_W['uniacid'],
|
||||
'backUrl' => SDK_BACK_NOTIFY_URL . '?i='.$_W['uniacid'],
|
||||
'signMethod' => '01',
|
||||
'channelType' => '08',
|
||||
'accessType' => '0',
|
||||
'merId' => SDK_MERID,
|
||||
'orderId' => $paylog['uniontid'],
|
||||
'txnTime' => date('YmdHis'),
|
||||
'txnAmt' => $paylog['fee'] * 100,
|
||||
'currencyCode' => '156',
|
||||
'defaultPayType' => '0001',
|
||||
'reqReserved' => $_W['uniacid'],
|
||||
);
|
||||
sign($params);
|
||||
$html_form = create_html($params, SDK_FRONT_TRANS_URL);
|
||||
echo $html_form;
|
||||
222
codes/agent/game/api/payment/unionpay/upacp_sdk_php/ReadMe.txt
Normal file
222
codes/agent/game/api/payment/unionpay/upacp_sdk_php/ReadMe.txt
Normal file
@@ -0,0 +1,222 @@
|
||||
|
||||
╭──────────────────────────────────────╮
|
||||
────┤ 银联全渠道支付插件包说明 ├────
|
||||
╰──────────────────────────────────────╯
|
||||
接口名称:银联全渠道支付统一接入接口
|
||||
代码版本:1.1
|
||||
开发语言:PHP
|
||||
版 权:银联全渠道
|
||||
制 作 者:银联全渠道
|
||||
联系方式:WZ
|
||||
|
||||
─────────────────────────────────
|
||||
|
||||
───────
|
||||
代码文件结构
|
||||
───────
|
||||
|
||||
|
||||
├gbk.func┈┈┈┈┈┈┈┈┈┈工具类文件夹
|
||||
│ │
|
||||
│ ├encryptParams.php┈┈┈┈┈┈┈┈┈┈┈ 对卡号,cvn2,密码,cvn2有效期处理类
|
||||
│ │
|
||||
│ ├PinBlock.php ┈┈┈┈┈┈┈┈┈┈密码解析类
|
||||
│ │
|
||||
│ ├httpClient.php┈┈┈┈┈┈┈┈┈后台交易通信处理类
|
||||
│ │
|
||||
│ ├SDKConfig.php ┈┈┈┈┈┈┈┈┈ 配置信息类
|
||||
│ │
|
||||
│ ├PublicEncrypte.php ┈┈┈┈┈┈┈┈┈┈ 密码/签名类
|
||||
│ │
|
||||
│ └common.php ┈┈┈┈┈┈┈┈报文方法类
|
||||
│ │
|
||||
│ └secureUtil.php┈┈┈┈┈┈┈┈签名/验签类
|
||||
│ │
|
||||
│ └log.class.php ┈┈┈┈┈┈┈┈日志打印工具类
|
||||
│
|
||||
|
||||
|
||||
|
||||
|
||||
※注意※
|
||||
|
||||
openssl证书需下载使用 其中的php_openssl.dll,ssleay32.dll,libeay32.dll3个文件拷到windows/system32/文件夹下,在重启Apache服务
|
||||
|
||||
|
||||
─────────
|
||||
主要类文件函数说明
|
||||
─────────
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
|
||||
SDKConfig.php
|
||||
|
||||
签名证书路径
|
||||
const SDK_SIGN_CERT_PATH = '';
|
||||
|
||||
签名证书密码
|
||||
const SDK_SIGN_CERT_PWD = '';
|
||||
|
||||
验签证书
|
||||
const SDK_VERIFY_CERT_PATH = '';
|
||||
|
||||
密码加密证书
|
||||
const SDK_ENCRYPT_CERT_PATH = '';
|
||||
|
||||
验签证书路径
|
||||
const SDK_VERIFY_CERT_DIR = '';
|
||||
|
||||
前台请求地址
|
||||
const SDK_FRONT_TRANS_URL = '';
|
||||
|
||||
后台返回结果地址
|
||||
const SDK_BACK_TRANS_URL = '';
|
||||
|
||||
批量交易
|
||||
const SDK_BATCH_TRANS_URL = '';
|
||||
|
||||
批量交易状态查询
|
||||
const SDK_BATCH_QUERY_URL = '';
|
||||
|
||||
|
||||
单笔查询请求地址
|
||||
const SDK_SINGLE_QUERY_URL = '';
|
||||
|
||||
文件传输请求地址
|
||||
const SDK_FILE_QUERY_URL = '';
|
||||
|
||||
前台通知地址
|
||||
const SDK_FRONT_NOTIFY_URL = '';
|
||||
|
||||
后台通知地址
|
||||
const SDK_BACK_NOTIFY_URL = '';
|
||||
|
||||
文件下载目录
|
||||
const SDK_FILE_DOWN_PATH = '';
|
||||
|
||||
日志 目录
|
||||
const SDK_LOG_FILE_PATH = '';
|
||||
|
||||
日志级别
|
||||
const SDK_LOG_LEVEL = '';
|
||||
|
||||
有卡交易地址
|
||||
const SDK_Card_Request_Url = '';
|
||||
|
||||
App交易地址
|
||||
const SDK_App_Request_Url = '';
|
||||
|
||||
┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉
|
||||
|
||||
common.php
|
||||
|
||||
function coverParamsToString($param)
|
||||
功能:数组 排序后转化为字体串
|
||||
|
||||
|
||||
function coverStringToArray($val )
|
||||
功能:字符串转换为 数组
|
||||
|
||||
function deal_params(&$params)
|
||||
功能:处理返回报文 解码客户信息 , 如果编码为GBK 则转为utf-8
|
||||
|
||||
|
||||
function deflate_file(&$params)
|
||||
功能:处理压缩文件
|
||||
|
||||
function deal_file($params)
|
||||
功能:处理报文文件
|
||||
|
||||
function create_html($params, $action)
|
||||
功能:构造自动提交表单
|
||||
|
||||
|
||||
|
||||
┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉
|
||||
|
||||
HttpClient.php
|
||||
|
||||
|
||||
function sendHttpRequest($params, $url)
|
||||
功能:建立请求,以模拟远程HTTP的POST请求方式构造并获取银联的处理结果
|
||||
|
||||
|
||||
function getRequestParamString($params)
|
||||
功能:组装报文
|
||||
|
||||
|
||||
┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉
|
||||
|
||||
encryptParams.php
|
||||
|
||||
function encrypt_params(&$params)
|
||||
功能:对卡号 | cvn2 | 密码 | cvn2有效期进行处理
|
||||
|
||||
|
||||
┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉
|
||||
|
||||
PinBlock.php
|
||||
function Pin2PinBlock( &$sPin )
|
||||
功能:密码转pin 验证转换
|
||||
|
||||
|
||||
|
||||
┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉
|
||||
|
||||
PublicEncrypte.php
|
||||
|
||||
function EncryptedPin($sPin, $sCardNo ,$sPubKeyURL)
|
||||
|
||||
功能:证书Id验证密码方法
|
||||
|
||||
|
||||
┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉
|
||||
|
||||
secureUtil.php
|
||||
|
||||
function sign(&$params)
|
||||
|
||||
功能:签名方法
|
||||
|
||||
function verify($params)
|
||||
|
||||
功能:验签方法
|
||||
|
||||
function getPulbicKeyByCertId($certId)
|
||||
|
||||
功能:根据证书ID加载证书方法
|
||||
|
||||
function getCertId($cert_path)
|
||||
|
||||
功能:取证书ID方法
|
||||
|
||||
function getCertIdByCerPath($cert_path)
|
||||
|
||||
功能:取证书类型方法
|
||||
|
||||
function getPublicKey($cert_path)
|
||||
|
||||
功能:取证书公钥 -验签
|
||||
|
||||
function getPrivateKey($cert_path)
|
||||
|
||||
功能:返回(签名)证书私钥
|
||||
|
||||
function encryptPan($pan)
|
||||
|
||||
功能:加密卡号方法
|
||||
|
||||
function encryptPin($pan, $pwd)
|
||||
|
||||
功能:pin加密方法
|
||||
|
||||
function encryptCvn2($cvn2)
|
||||
|
||||
功能:cvn2加密方法
|
||||
|
||||
function encryptDate($certDate)
|
||||
|
||||
功能:有效期加密方法
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
function EncryptedPin($sPin, $sCardNo ,$sPubKeyURL)
|
||||
{
|
||||
global $log;
|
||||
$sPubKeyURL = trim(SDK_ENCRYPT_CERT_PATH," ");
|
||||
$fp = fopen($sPubKeyURL, "r");
|
||||
if ($fp != NULL)
|
||||
{
|
||||
$sCrt = fread($fp, 8192);
|
||||
fclose($fp);
|
||||
}
|
||||
$sPubCrt = openssl_x509_read($sCrt);
|
||||
if ($sPubCrt === FALSE)
|
||||
{
|
||||
print("openssl_x509_read in false!");
|
||||
return (-1);
|
||||
}
|
||||
$sPubKey = openssl_x509_parse($sPubCrt);
|
||||
|
||||
$sInput = Pin2PinBlockWithCardNO($sPin, $sCardNo);
|
||||
if ($sInput == 1)
|
||||
{
|
||||
print("Pin2PinBlockWithCardNO Error ! : " . $sInput);
|
||||
return (1);
|
||||
}
|
||||
$iRet = openssl_public_encrypt($sInput, $sOutData, $sCrt, OPENSSL_PKCS1_PADDING);
|
||||
if ($iRet === TRUE)
|
||||
{
|
||||
$sBase64EncodeOutData = base64_encode($sOutData);
|
||||
return $sBase64EncodeOutData;
|
||||
}
|
||||
else
|
||||
{
|
||||
print("openssl_public_encrypt Error !");
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
header ( 'Content-type:text/html;charset=utf-8' );
|
||||
|
||||
function sendHttpRequest($params, $url) {
|
||||
$opts = getRequestParamString ( $params );
|
||||
|
||||
$ch = curl_init ();
|
||||
curl_setopt ( $ch, CURLOPT_URL, $url );
|
||||
curl_setopt ( $ch, CURLOPT_POST, 1 );
|
||||
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt ( $ch, CURLOPT_SSLVERSION, 3);
|
||||
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array (
|
||||
'Content-type:application/x-www-form-urlencoded;charset=UTF-8'
|
||||
) );
|
||||
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $opts );
|
||||
|
||||
|
||||
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
|
||||
|
||||
$html = curl_exec ( $ch );
|
||||
curl_close ( $ch );
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
function getRequestParamString($params) {
|
||||
$params_str = '';
|
||||
foreach ( $params as $key => $value ) {
|
||||
$params_str .= ($key . '=' . (!isset ( $value ) ? '' : urlencode( $value )) . '&');
|
||||
}
|
||||
return substr ( $params_str, 0, strlen ( $params_str ) - 1 );
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
class PhpLog
|
||||
{
|
||||
const DEBUG = 1; const INFO = 2; const WARN = 3; const ERROR = 4; const FATAL = 5; const OFF = 6;
|
||||
const LOG_OPEN = 1;
|
||||
const OPEN_FAILED = 2;
|
||||
const LOG_CLOSED = 3;
|
||||
|
||||
|
||||
public $Log_Status = PhpLog::LOG_CLOSED;
|
||||
public $DateFormat= "Y-m-d G:i:s";
|
||||
public $MessageQueue;
|
||||
|
||||
private $filename;
|
||||
private $log_file;
|
||||
private $priority = PhpLog::INFO;
|
||||
|
||||
private $file_handle;
|
||||
|
||||
|
||||
|
||||
public function __construct( $filepath, $timezone, $priority )
|
||||
{
|
||||
if ( $priority == PhpLog::OFF ) return;
|
||||
|
||||
$this->filename = date('Y-m-d', time()) . '.log'; $this->log_file = $this->createPath($filepath, $this->filename);
|
||||
$this->MessageQueue = array();
|
||||
$this->priority = $priority;
|
||||
date_default_timezone_set($timezone);
|
||||
|
||||
if ( !file_exists($filepath) ) {
|
||||
if(!empty($filepath)) {
|
||||
if(!($this->_createDir($filepath)))
|
||||
{
|
||||
die("创建目录失败!");
|
||||
}
|
||||
if ( !is_writable($this->log_file) )
|
||||
{
|
||||
$this->Log_Status = PhpLog::OPEN_FAILED;
|
||||
$this->MessageQueue[] = "The file exists, but could not be opened for writing. Check that appropriate permissions have been set.";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $this->file_handle = fopen( $this->log_file , "a+" ) )
|
||||
{
|
||||
$this->Log_Status = PhpLog::LOG_OPEN;
|
||||
$this->MessageQueue[] = "The log file was opened successfully.";
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->Log_Status = PhpLog::OPEN_FAILED;
|
||||
$this->MessageQueue[] = "The file could not be opened. Check permissions.";
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
if ( $this->file_handle )
|
||||
fclose( $this->file_handle );
|
||||
}
|
||||
|
||||
|
||||
private function _createDir($dir)
|
||||
{
|
||||
return is_dir($dir) or (self::_createDir(dirname($dir)) and mkdir($dir, 0777));
|
||||
}
|
||||
|
||||
|
||||
private function createPath($dir, $filename)
|
||||
{
|
||||
if (empty($dir))
|
||||
{
|
||||
return $filename;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $dir . "/" . $filename;
|
||||
}
|
||||
}
|
||||
|
||||
public function LogInfo($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::INFO, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogDebug($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::DEBUG, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogWarn($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::WARN, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogError($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::ERROR, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogFatal($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::FATAL, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
|
||||
public function Log($line, $priority, $sFile, $iLine)
|
||||
{
|
||||
if ($iLine > 0)
|
||||
{
|
||||
$line = iconv('GBK', 'UTF-8', $line);
|
||||
if ( $this->priority <= $priority )
|
||||
{
|
||||
$status = $this->getTimeLine( $priority, $sFile, $iLine);
|
||||
$this->WriteFreeFormLine ( "$status $line \n" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
if ( $this->priority <= $priority )
|
||||
{
|
||||
$status = $this->getTimeLine( $priority, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
$this->WriteFreeFormLine ( "$status $line \n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
public function WriteFreeFormLine( $line )
|
||||
{
|
||||
if ( $this->Log_Status == PhpLog::LOG_OPEN && $this->priority != PhpLog::OFF )
|
||||
{
|
||||
if (fwrite( $this->file_handle , $line ) === false)
|
||||
{
|
||||
$this->MessageQueue[] = "The file could not be written to. Check that appropriate permissions have been set.";
|
||||
}
|
||||
}
|
||||
}
|
||||
private function getRemoteIP()
|
||||
{
|
||||
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key)
|
||||
{
|
||||
if (array_key_exists($key, $_SERVER) === true)
|
||||
{
|
||||
foreach (explode(',', $_SERVER[$key]) as $ip)
|
||||
{
|
||||
$ip = trim($ip);
|
||||
if (!empty($ip))
|
||||
{
|
||||
return $ip;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return "_NO_IP";
|
||||
}
|
||||
|
||||
private function getTimeLine( $level, $FilePath, $FileLine)
|
||||
{
|
||||
$time = date( $this->DateFormat );
|
||||
$ip = $this->getRemoteIP();
|
||||
switch( $level )
|
||||
{
|
||||
case PhpLog::INFO:
|
||||
return "$time, " . "INFO, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::WARN:
|
||||
return "$time, " . "WARN, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::DEBUG:
|
||||
return "$time, " . "DEBUG, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::ERROR:
|
||||
return "$time, " . "ERROR, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::FATAL:
|
||||
return "$time, " . "FATAL, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
default:
|
||||
return "$time, " . "LOG, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
/**
|
||||
* [WEIZAN System] Copyright (c) 2014 012WZ.COM
|
||||
* WEIZAN is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
function Pin2PinBlock( &$sPin )
|
||||
{
|
||||
$iTemp = 1;
|
||||
$sPinLen = strlen($sPin);
|
||||
$sBuf = array();
|
||||
$sBuf[0]=intval($sPinLen, 10);
|
||||
|
||||
if($sPinLen % 2 ==0)
|
||||
{
|
||||
for ($i=0; $i<$sPinLen;)
|
||||
{
|
||||
$tBuf = substr($sPin, $i, 2);
|
||||
$sBuf[$iTemp] = intval($tBuf, 16);
|
||||
unset($tBuf);
|
||||
if ($i == ($sPinLen - 2))
|
||||
{
|
||||
if ($iTemp < 7)
|
||||
{
|
||||
$t = 0;
|
||||
for ($t=($iTemp+1); $t<8; $t++)
|
||||
{
|
||||
$sBuf[$t] = 0xff;
|
||||
}
|
||||
}
|
||||
}
|
||||
$iTemp++;
|
||||
$i = $i + 2; }
|
||||
}
|
||||
else
|
||||
{
|
||||
for ($i=0; $i<$sPinLen;)
|
||||
{
|
||||
if ($i ==($sPinLen-1))
|
||||
{
|
||||
$mBuf = substr($sPin, $i, 1) . "f";
|
||||
$sBuf[$iTemp] = intval($mBuf, 16);
|
||||
unset($mBuf);
|
||||
if (($iTemp)<7)
|
||||
{
|
||||
$t = 0;
|
||||
for ($t=($iTemp+1); $t<8; $t++)
|
||||
{
|
||||
$sBuf[$t] = 0xff;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$tBuf = substr($sPin, $i, 2);
|
||||
$sBuf[$iTemp] = intval($tBuf, 16);
|
||||
unset($tBuf);
|
||||
}
|
||||
$iTemp++;
|
||||
$i = $i + 2;
|
||||
}
|
||||
}
|
||||
return $sBuf;
|
||||
}
|
||||
|
||||
function FormatPan(&$sPan)
|
||||
{
|
||||
$iPanLen = strlen($sPan);
|
||||
$iTemp = $iPanLen - 13;
|
||||
$sBuf = array();
|
||||
$sBuf[0] = 0x00;
|
||||
$sBuf[1] = 0x00;
|
||||
for ($i=2; $i<8; $i++)
|
||||
{
|
||||
$tBuf = substr($sPan, $iTemp, 2);
|
||||
$sBuf[$i] = intval($tBuf, 16);
|
||||
$iTemp = $iTemp + 2;
|
||||
}
|
||||
return $sBuf;
|
||||
}
|
||||
|
||||
function Pin2PinBlockWithCardNO(&$sPin, &$sCardNO)
|
||||
{
|
||||
global $log;
|
||||
$sPinBuf = Pin2PinBlock($sPin);
|
||||
$iCardLen = strlen($sCardNO);
|
||||
if ($iCardLen <= 10)
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
elseif ($iCardLen==11){
|
||||
$sCardNO = "00" . $sCardNO;
|
||||
}
|
||||
elseif ($iCardLen==12){
|
||||
$sCardNO = "0" . $sCardNO;
|
||||
}
|
||||
$sPanBuf = FormatPan($sCardNO);
|
||||
$sBuf = array();
|
||||
|
||||
for ($i=0; $i<8; $i++)
|
||||
{
|
||||
$sBuf[$i] = vsprintf("%c", ($sPinBuf[$i] ^ $sPanBuf[$i]));
|
||||
}
|
||||
unset($sPinBuf);
|
||||
unset($sPanBuf);
|
||||
$sOutput = implode("", $sBuf); return $sOutput;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
function EncryptedPin($sPin, $sCardNo ,$sPubKeyURL)
|
||||
{
|
||||
global $log;
|
||||
$sPubKeyURL = trim(SDK_ENCRYPT_CERT_PATH," ");
|
||||
$fp = fopen($sPubKeyURL, "r");
|
||||
if ($fp != NULL)
|
||||
{
|
||||
$sCrt = fread($fp, 8192);
|
||||
fclose($fp);
|
||||
}
|
||||
$sPubCrt = openssl_x509_read($sCrt);
|
||||
if ($sPubCrt === FALSE)
|
||||
{
|
||||
print("openssl_x509_read in false!");
|
||||
return (-1);
|
||||
}
|
||||
$sPubKey = openssl_x509_parse($sPubCrt);
|
||||
|
||||
$sInput = Pin2PinBlockWithCardNO($sPin, $sCardNo);
|
||||
if ($sInput == 1)
|
||||
{
|
||||
print("Pin2PinBlockWithCardNO Error ! : " . $sInput);
|
||||
return (1);
|
||||
}
|
||||
$iRet = openssl_public_encrypt($sInput, $sOutData, $sCrt, OPENSSL_PKCS1_PADDING);
|
||||
if ($iRet === TRUE)
|
||||
{
|
||||
$sBase64EncodeOutData = base64_encode($sOutData);
|
||||
return $sBase64EncodeOutData;
|
||||
}
|
||||
else
|
||||
{
|
||||
print("openssl_public_encrypt Error !");
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* [WEIZAN System] Copyright (c) 2014 012WZ.COM
|
||||
* WEIZAN is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/const SDK_CVN2_ENC = 0;
|
||||
const SDK_DATE_ENC = 0;
|
||||
const SDK_PAN_ENC = 0;
|
||||
|
||||
const SDK_SIGN_CERT_PATH = 'D:/certs/PM_700000000000001_acp.pfx';
|
||||
|
||||
const SDK_SIGN_CERT_PWD = '000000';
|
||||
|
||||
const SDK_ENCRYPT_CERT_PATH = 'D:/certs/verify_sign_acp.cer';
|
||||
|
||||
const SDK_VERIFY_CERT_DIR = 'D:/certs/';
|
||||
|
||||
const SDK_FRONT_TRANS_URL = 'https://101.231.204.80:5000/gateway/api/frontTransReq.do';
|
||||
|
||||
const SDK_BACK_TRANS_URL = 'https://101.231.204.80:5000/gateway/api/backTransReq.do';
|
||||
|
||||
const SDK_BATCH_TRANS_URL = 'https://101.231.204.80:5000/gateway/api/batchTrans.do';
|
||||
|
||||
const SDK_SINGLE_QUERY_URL = 'https://101.231.204.80:5000/gateway/api/queryTrans.do';
|
||||
|
||||
const SDK_FILE_QUERY_URL = 'https://101.231.204.80:9080/';
|
||||
|
||||
const SDK_Card_Request_Url = 'https://101.231.204.80:5000/gateway/api/cardTransReq.do';
|
||||
|
||||
const SDK_App_Request_Url = 'https://101.231.204.80:5000/gateway/api/appTransReq.do';
|
||||
|
||||
|
||||
const SDK_FRONT_NOTIFY_URL = 'http://localhost:8085/upacp_sdk_php/demo/gbk/FrontReceive.php';
|
||||
const SDK_BACK_NOTIFY_URL = 'http://114.82.43.123/upacp_sdk_php/demo/gbk/BackReceive.php';
|
||||
|
||||
const SDK_FILE_DOWN_PATH = 'd:/file/';
|
||||
|
||||
const SDK_LOG_FILE_PATH = 'd:/logs/';
|
||||
|
||||
const SDK_LOG_LEVEL = 'INFO';
|
||||
?>
|
||||
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/**
|
||||
* [WEIZAN System] Copyright (c) 2014 012WZ.COM
|
||||
* WEIZAN is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/$log = new PhpLog ( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
|
||||
|
||||
function coverParamsToString($params) {
|
||||
$sign_str = '';
|
||||
ksort ( $params );
|
||||
foreach ( $params as $key => $val ) {
|
||||
if ($key == 'signature') {
|
||||
continue;
|
||||
}
|
||||
$sign_str .= sprintf ( "%s=%s&", $key, $val );
|
||||
}
|
||||
return substr ( $sign_str, 0, strlen ( $sign_str ) - 1 );
|
||||
}
|
||||
|
||||
function coverStringToArray($str) {
|
||||
$result = array ();
|
||||
|
||||
if (! empty ( $str )) {
|
||||
$temp = preg_split ( '/&/', $str );
|
||||
if (! empty ( $temp )) {
|
||||
foreach ( $temp as $key => $val ) {
|
||||
$arr = preg_split ( '/=/', $val, 2 );
|
||||
if (! empty ( $arr )) {
|
||||
$k = $arr ['0'];
|
||||
$v = $arr ['1'];
|
||||
$result [$k] = $v;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function deal_params(&$params) {
|
||||
|
||||
if (! empty ( $params ['customerInfo'] )) {
|
||||
$params ['customerInfo'] = base64_decode ( $params ['customerInfo'] );
|
||||
}
|
||||
|
||||
if (! empty ( $params ['encoding'] ) && strtoupper ( $params ['encoding'] ) == 'utf-8') {
|
||||
foreach ( $params as $key => $val ) {
|
||||
$params [$key] = iconv ( 'utf-8', 'UTF-8', $val );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function deflate_file(&$params) {
|
||||
global $log;
|
||||
foreach ( $_FILES as $file ) {
|
||||
$log->LogInfo ( "---------处理文件---------" );
|
||||
if (file_exists ( $file ['tmp_name'] )) {
|
||||
$params ['fileName'] = $file ['name'];
|
||||
|
||||
$file_content = file_get_contents ( $file ['tmp_name'] );
|
||||
$file_content_deflate = gzcompress ( $file_content );
|
||||
|
||||
$params ['fileContent'] = base64_encode ( $file_content_deflate );
|
||||
$log->LogInfo ( "压缩后文件内容为>" . base64_encode ( $file_content_deflate ) );
|
||||
} else {
|
||||
$log->LogInfo ( ">>>>文件上传失败<<<<<" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function deal_file($params) {
|
||||
global $log;
|
||||
if (isset ( $params ['fileContent'] )) {
|
||||
$log->LogInfo ( "---------处理后台报文返回的文件---------" );
|
||||
$fileContent = $params ['fileContent'];
|
||||
|
||||
if (empty ( $fileContent )) {
|
||||
$log->LogInfo ( '文件内容为空' );
|
||||
} else {
|
||||
$content = gzuncompress ( base64_decode ( $fileContent ) );
|
||||
$root = SDK_FILE_DOWN_PATH;
|
||||
$filePath = null;
|
||||
if (empty ( $params ['fileName'] )) {
|
||||
$log->LogInfo ( "文件名为空" );
|
||||
$filePath = $root . $params ['merId'] . '_' . $params ['batchNo'] . '_' . $params ['txnTime'] . 'txt';
|
||||
} else {
|
||||
$filePath = $root . $params ['fileName'];
|
||||
}
|
||||
$handle = fopen ( $filePath, "w+" );
|
||||
if (! is_writable ( $filePath )) {
|
||||
$log->LogInfo ( "文件:" . $filePath . "不可写,请检查!" );
|
||||
} else {
|
||||
file_put_contents ( $filePath, $content );
|
||||
$log->LogInfo ( "文件位置 >:" . $filePath );
|
||||
}
|
||||
fclose ( $handle );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function create_html($params, $action) {
|
||||
$encodeType = isset ( $params ['encoding'] ) ? $params ['encoding'] : 'UTF-8';
|
||||
$html = <<<eot
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset={$encodeType}" />
|
||||
</head>
|
||||
<body onload="javascript:document.pay_form.submit();">
|
||||
<form id="pay_form" name="pay_form" action="{$action}" method="post">
|
||||
|
||||
eot;
|
||||
foreach ( $params as $key => $value ) {
|
||||
$html .= " <input type=\"hidden\" name=\"{$key}\" id=\"{$key}\" value=\"{$value}\" />\n";
|
||||
}
|
||||
$html .= <<<eot
|
||||
<input type="submit" type="hidden" value="稍等,支付跳转跳..." style="border:none;">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
eot;
|
||||
return $html;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
header ( 'Content-type:text/html;charset=utf-8' );
|
||||
/**
|
||||
* [WEIZAN System] Copyright (c) 2014 012WZ.COM
|
||||
* WEIZAN is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/
|
||||
function sendHttpRequest($params, $url) {
|
||||
$opts = getRequestParamString ( $params );
|
||||
|
||||
$ch = curl_init ();
|
||||
curl_setopt ( $ch, CURLOPT_URL, $url );
|
||||
curl_setopt ( $ch, CURLOPT_POST, 1 );
|
||||
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt ( $ch, CURLOPT_SSLVERSION, 3);
|
||||
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array (
|
||||
'Content-type:application/x-www-form-urlencoded;charset=UTF-8'
|
||||
) );
|
||||
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $opts );
|
||||
|
||||
|
||||
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
|
||||
|
||||
$html = curl_exec ( $ch );
|
||||
curl_close ( $ch );
|
||||
return $html;
|
||||
}
|
||||
|
||||
|
||||
function getRequestParamString($params) {
|
||||
$params_str = '';
|
||||
foreach ( $params as $key => $value ) {
|
||||
$params_str .= ($key . '=' . (!isset ( $value ) ? '' : urlencode( $value )) . '&');
|
||||
}
|
||||
return substr ( $params_str, 0, strlen ( $params_str ) - 1 );
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
class PhpLog
|
||||
{
|
||||
const DEBUG = 1; const INFO = 2; const WARN = 3; const ERROR = 4; const FATAL = 5; const OFF = 6;
|
||||
const LOG_OPEN = 1;
|
||||
const OPEN_FAILED = 2;
|
||||
const LOG_CLOSED = 3;
|
||||
|
||||
|
||||
public $Log_Status = PhpLog::LOG_CLOSED;
|
||||
public $DateFormat= "Y-m-d G:i:s";
|
||||
public $MessageQueue;
|
||||
|
||||
private $filename;
|
||||
private $log_file;
|
||||
private $priority = PhpLog::INFO;
|
||||
|
||||
private $file_handle;
|
||||
|
||||
|
||||
|
||||
public function __construct( $filepath, $timezone, $priority )
|
||||
{
|
||||
if ( $priority == PhpLog::OFF ) return;
|
||||
|
||||
$this->filename = date('Y-m-d', time()) . '.log'; $this->log_file = $this->createPath($filepath, $this->filename);
|
||||
$this->MessageQueue = array();
|
||||
$this->priority = $priority;
|
||||
date_default_timezone_set($timezone);
|
||||
|
||||
if ( !file_exists($filepath) ) {
|
||||
if(!empty($filepath)) {
|
||||
if(!($this->_createDir($filepath)))
|
||||
{
|
||||
die("创建目录失败!");
|
||||
}
|
||||
if ( !is_writable($this->log_file) )
|
||||
{
|
||||
$this->Log_Status = PhpLog::OPEN_FAILED;
|
||||
$this->MessageQueue[] = "The file exists, but could not be opened for writing. Check that appropriate permissions have been set.";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $this->file_handle = fopen( $this->log_file , "a+" ) )
|
||||
{
|
||||
$this->Log_Status = PhpLog::LOG_OPEN;
|
||||
$this->MessageQueue[] = "The log file was opened successfully.";
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->Log_Status = PhpLog::OPEN_FAILED;
|
||||
$this->MessageQueue[] = "The file could not be opened. Check permissions.";
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
if ( $this->file_handle )
|
||||
fclose( $this->file_handle );
|
||||
}
|
||||
|
||||
|
||||
private function _createDir($dir)
|
||||
{
|
||||
return is_dir($dir) or (self::_createDir(dirname($dir)) and mkdir($dir, 0777));
|
||||
}
|
||||
|
||||
|
||||
private function createPath($dir, $filename)
|
||||
{
|
||||
if (empty($dir))
|
||||
{
|
||||
return $filename;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $dir . "/" . $filename;
|
||||
}
|
||||
}
|
||||
|
||||
public function LogInfo($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::INFO, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogDebug($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::DEBUG, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogWarn($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::WARN, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogError($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::ERROR, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
public function LogFatal($line)
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
$this->Log( $line, PhpLog::FATAL, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
}
|
||||
|
||||
|
||||
public function Log($line, $priority, $sFile, $iLine)
|
||||
{
|
||||
if ($iLine > 0)
|
||||
{
|
||||
$line = iconv('GBK', 'UTF-8', $line);
|
||||
if ( $this->priority <= $priority )
|
||||
{
|
||||
$status = $this->getTimeLine( $priority, $sFile, $iLine);
|
||||
$this->WriteFreeFormLine ( "$status $line \n" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
$sAarray = array();
|
||||
$sAarray = debug_backtrace();
|
||||
$sGetFilePath = $sAarray[0]["file"];
|
||||
$sGetFileLine = $sAarray[0]["line"];
|
||||
if ( $this->priority <= $priority )
|
||||
{
|
||||
$status = $this->getTimeLine( $priority, $sGetFilePath, $sGetFileLine);
|
||||
unset($sAarray);
|
||||
unset($sGetFilePath);
|
||||
unset($sGetFileLine);
|
||||
$this->WriteFreeFormLine ( "$status $line \n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
public function WriteFreeFormLine( $line )
|
||||
{
|
||||
if ( $this->Log_Status == PhpLog::LOG_OPEN && $this->priority != PhpLog::OFF )
|
||||
{
|
||||
if (fwrite( $this->file_handle , $line ) === false)
|
||||
{
|
||||
$this->MessageQueue[] = "The file could not be written to. Check that appropriate permissions have been set.";
|
||||
}
|
||||
}
|
||||
}
|
||||
private function getRemoteIP()
|
||||
{
|
||||
foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key)
|
||||
{
|
||||
if (array_key_exists($key, $_SERVER) === true)
|
||||
{
|
||||
foreach (explode(',', $_SERVER[$key]) as $ip)
|
||||
{
|
||||
$ip = trim($ip);
|
||||
if (!empty($ip))
|
||||
{
|
||||
return $ip;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return "_NO_IP";
|
||||
}
|
||||
|
||||
private function getTimeLine( $level, $FilePath, $FileLine)
|
||||
{
|
||||
$time = date( $this->DateFormat );
|
||||
$ip = $this->getRemoteIP();
|
||||
switch( $level )
|
||||
{
|
||||
case PhpLog::INFO:
|
||||
return "$time, " . "INFO, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::WARN:
|
||||
return "$time, " . "WARN, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::DEBUG:
|
||||
return "$time, " . "DEBUG, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::ERROR:
|
||||
return "$time, " . "ERROR, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
case PhpLog::FATAL:
|
||||
return "$time, " . "FATAL, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
default:
|
||||
return "$time, " . "LOG, " . "$ip, " . "File[ $FilePath ], " . "Line[$FileLine]" . "------";
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [WEIZAN System] Copyright (c) 2014 012WZ.COM
|
||||
* WEIZAN is NOT a free software, it under the license terms, visited http://www.012wz.com/ for more details.
|
||||
*/$log = new PhpLog ( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
|
||||
|
||||
function sign(&$params) {
|
||||
global $log;
|
||||
$log->LogInfo ( '=====签名报文开始======' );
|
||||
if(isset($params['transTempUrl'])){
|
||||
unset($params['transTempUrl']);
|
||||
}
|
||||
$params_str = coverParamsToString ( $params );
|
||||
$log->LogInfo ( "签名key=val&...串 >" . $params_str );
|
||||
|
||||
$params_sha1x16 = sha1 ( $params_str, FALSE );
|
||||
$log->LogInfo ( "摘要sha1x16 >" . $params_sha1x16 );
|
||||
$cert_path = SDK_SIGN_CERT_PATH;
|
||||
$private_key = getPrivateKey ( $cert_path );
|
||||
$sign_falg = openssl_sign ( $params_sha1x16, $signature, $private_key, OPENSSL_ALGO_SHA1 );
|
||||
if ($sign_falg) {
|
||||
$signature_base64 = base64_encode ( $signature );
|
||||
$log->LogInfo ( "签名串为 >" . $signature_base64 );
|
||||
$params ['signature'] = $signature_base64;
|
||||
} else {
|
||||
$log->LogInfo ( ">>>>>签名失败<<<<<<<" );
|
||||
}
|
||||
$log->LogInfo ( '=====签名报文结束======' );
|
||||
}
|
||||
|
||||
|
||||
function verify($params) {
|
||||
global $log;
|
||||
$public_key = getPulbicKeyByCertId ( $params ['certId'] );
|
||||
$signature_str = $params ['signature'];
|
||||
unset ( $params ['signature'] );
|
||||
$params_str = coverParamsToString ( $params );
|
||||
$log->LogInfo ( '报文去[signature] key=val&串>' . $params_str );
|
||||
$signature = base64_decode ( $signature_str );
|
||||
$params_sha1x16 = sha1 ( $params_str, FALSE );
|
||||
$log->LogInfo ( '摘要shax16>' . $params_sha1x16 );
|
||||
$isSuccess = openssl_verify ( $params_sha1x16, $signature,$public_key, OPENSSL_ALGO_SHA1 );
|
||||
$log->LogInfo ( $isSuccess ? '验签成功' : '验签失败' );
|
||||
return $isSuccess;
|
||||
}
|
||||
|
||||
|
||||
function getPulbicKeyByCertId($certId) {
|
||||
global $log;
|
||||
$log->LogInfo ( '报文返回的证书ID>' . $certId );
|
||||
$cert_dir = SDK_VERIFY_CERT_DIR;
|
||||
$log->LogInfo ( '验证签名证书目录 :>' . $cert_dir );
|
||||
$handle = opendir ( $cert_dir );
|
||||
if ($handle) {
|
||||
while ( $file = readdir ( $handle ) ) {
|
||||
clearstatcache ();
|
||||
$filePath = $cert_dir . '/' . $file;
|
||||
if (is_file ( $filePath )) {
|
||||
if (pathinfo ( $file, PATHINFO_EXTENSION ) == 'cer') {
|
||||
if (getCertIdByCerPath ( $filePath ) == $certId) {
|
||||
closedir ( $handle );
|
||||
$log->LogInfo ( '加载验签证书成功' );
|
||||
return getPublicKey ( $filePath );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$log->LogInfo ( '没有找到证书ID为[' . $certId . ']的证书' );
|
||||
} else {
|
||||
$log->LogInfo ( '证书目录 ' . $cert_dir . '不正确' );
|
||||
}
|
||||
closedir ( $handle );
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
function getCertId($cert_path) {
|
||||
$pkcs12certdata = file_get_contents ( $cert_path );
|
||||
|
||||
openssl_pkcs12_read ( $pkcs12certdata, $certs, SDK_SIGN_CERT_PWD );
|
||||
$x509data = $certs ['cert'];
|
||||
openssl_x509_read ( $x509data );
|
||||
$certdata = openssl_x509_parse ( $x509data );
|
||||
$cert_id = $certdata ['serialNumber'];
|
||||
return $cert_id;
|
||||
}
|
||||
|
||||
|
||||
function getCertIdByCerPath($cert_path) {
|
||||
$x509data = file_get_contents ( $cert_path );
|
||||
openssl_x509_read ( $x509data );
|
||||
$certdata = openssl_x509_parse ( $x509data );
|
||||
$cert_id = $certdata ['serialNumber'];
|
||||
return $cert_id;
|
||||
}
|
||||
|
||||
|
||||
function getSignCertId() {
|
||||
|
||||
return getCertId ( SDK_SIGN_CERT_PATH );
|
||||
}
|
||||
function getEncryptCertId() {
|
||||
return getCertIdByCerPath ( SDK_ENCRYPT_CERT_PATH );
|
||||
}
|
||||
|
||||
|
||||
function getPublicKey($cert_path) {
|
||||
return file_get_contents ( $cert_path );
|
||||
}
|
||||
|
||||
function getPrivateKey($cert_path) {
|
||||
$pkcs12 = file_get_contents ( $cert_path );
|
||||
openssl_pkcs12_read ( $pkcs12, $certs, SDK_SIGN_CERT_PWD );
|
||||
return $certs ['pkey'];
|
||||
}
|
||||
|
||||
|
||||
function encryptPan($pan) {
|
||||
$cert_path = MPI_ENCRYPT_CERT_PATH;
|
||||
$public_key = getPublicKey ( $cert_path );
|
||||
|
||||
openssl_public_encrypt ( $pan, $cryptPan, $public_key );
|
||||
return base64_encode ( $cryptPan );
|
||||
}
|
||||
|
||||
function encryptPin($pan, $pwd) {
|
||||
$cert_path = SDK_ENCRYPT_CERT_PATH;
|
||||
$public_key = getPublicKey ( $cert_path );
|
||||
|
||||
return EncryptedPin ( $pwd, $pan, $public_key );
|
||||
}
|
||||
|
||||
function encryptCvn2($cvn2) {
|
||||
$cert_path = SDK_ENCRYPT_CERT_PATH;
|
||||
$public_key = getPublicKey ( $cert_path );
|
||||
|
||||
openssl_public_encrypt ( $cvn2, $crypted, $public_key );
|
||||
|
||||
return base64_encode ( $crypted );
|
||||
}
|
||||
|
||||
function encryptDate($certDate) {
|
||||
$cert_path = SDK_ENCRYPT_CERT_PATH;
|
||||
$public_key = getPublicKey ( $cert_path );
|
||||
|
||||
openssl_public_encrypt ( $certDate, $crypted, $public_key );
|
||||
|
||||
return base64_encode ( $crypted );
|
||||
}
|
||||
|
||||
|
||||
function encryptDateType($certDataType) {
|
||||
$cert_path = SDK_ENCRYPT_CERT_PATH;
|
||||
$public_key = getPublicKey ( $cert_path );
|
||||
|
||||
openssl_public_encrypt ( $certDataType, $crypted, $public_key );
|
||||
|
||||
return base64_encode ( $crypted );
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user