Commit cf69edc0 by Administrator

Merge branch 'master-LTF' into 'master'

Master ltf

See merge request !1
2 parents 93ef1753 a21d9bb4
...@@ -25,12 +25,13 @@ $config = [ ...@@ -25,12 +25,13 @@ $config = [
$payData = [ $payData = [
'out_trade_no' => '2019062017085196425851101912', 'out_trade_no' => '2019062017085196425851101912',
'refund_no' => '2019062017085196425851101912', 'refund_no' => '2019062017085196425851101912',
'total_fee'=>0.9
]; ];
//2019062017085196425851101985 //2019062017085196425851101985
try{ try{
$ret = Close::run(Config::LTF_CHARGE, $config, $payData); $ret = Charge::run(Config::LTF_CHANNEL_LITE, $config, $payData);
}catch(PayException $e){ }catch(PayException $e){
exit($e->errorMessage()); exit($e->errorMessage());
} }
......
...@@ -17,7 +17,7 @@ abstract class ChargeBaseData extends LTFBaseData{ ...@@ -17,7 +17,7 @@ abstract class ChargeBaseData extends LTFBaseData{
protected function checkDataParam(){ protected function checkDataParam(){
// TODO: Implement checkDataParam() method. // TODO: Implement checkDataParam() method.
// 检查金额不能低于0.01 // 检查金额不能低于0.01
if ($this->total_fee < 1) { if ($this->total_fee < 0.01) {
throw new PayException('支付金额不能低于 ' . Config::PAY_MIN_FEE . ' 元'); throw new PayException('支付金额不能低于 ' . Config::PAY_MIN_FEE . ' 元');
} }
......
...@@ -5,7 +5,7 @@ namespace Payment\Notify; ...@@ -5,7 +5,7 @@ namespace Payment\Notify;
use Payment\Common\LTFConfig; use Payment\Common\LTFConfig;
use Payment\Common\PayException; use Payment\Common\PayException;
use Payment\Config; use Payment\Config;
use Payment\Utils\DataParser; use Payment\Utils\ArrayUtil;
class LTFNotify extends NotifyStrategy{ class LTFNotify extends NotifyStrategy{
...@@ -31,13 +31,19 @@ class LTFNotify extends NotifyStrategy{ ...@@ -31,13 +31,19 @@ class LTFNotify extends NotifyStrategy{
* @return array|false * @return array|false
*/ */
public function getNotifyData(){ public function getNotifyData(){
$params = []; $params = array();
$data = $_POST['req'] ?? file_get_contents('php://input');
if (empty($data)) return false; //支持直接读取input流
$params = DataParser::toArray(urldecode($data)); $data = @file_get_contents('php://input');
if (empty($params) || count($params) < 1) return false; if(!empty($data)){
foreach ($params as $key => &$value) $value = is_array($value) && empty($value) ? '' : $value; $inputArray = json_decode($data, true);
unset($value); $params = array_merge($params, $inputArray);
}
if(count($params) < 1){//如果参数为空,则不进行处理
return false;
}
return $params; return $params;
// TODO: Implement getNotifyData() method. // TODO: Implement getNotifyData() method.
} }
...@@ -48,48 +54,72 @@ class LTFNotify extends NotifyStrategy{ ...@@ -48,48 +54,72 @@ class LTFNotify extends NotifyStrategy{
* *
* @param array $data 由 $this->getNotifyData() 返回的数据 * @param array $data 由 $this->getNotifyData() 返回的数据
* @return boolean * @return boolean
* @throws \Exception
*/ */
public function checkNotifyData(array $data){ public function checkNotifyData(array $data){
if ($data['code'] != 'SUCCESS') return false; if($data['code'] != 'SUCCESS') return false;
return $this->verifySign($data); return $this->verifySign($data);
// TODO: Implement checkNotifyData() method. // TODO: Implement checkNotifyData() method.
} }
/** /**
* 检查数据是否被篡改过 * 检查数据是否被篡改过
*
* @param array $retData * @param array $retData
* @return bool * @return bool
* @throws \Exception
*/ */
protected function verifySign(array $retData) protected function verifySign(array $retData){
{ $retSign = $retData['sign'];//先不验证加密
$retSign = $retData['sign'] ?? '';
return true; return true;
$data = ArrayUtil::removeKeys($retData, ['sign']);
$values = [
'return_code' => $data['code'],
'return_msg' => $data['msg'],
'out_trade_no' => $data['outTradeNo'],
'transaction_id' => $data['transactionId'],
'pay_type' => $data['payType'],
'total_fee' => $data['totalAmount'],
'user_id' => $data['buyerId'],
'out_transaction_id' => $data['outTransactionId'],
];
$values = ArrayUtil::paraFilter($values);
// $values = ArrayUtil::arraySort($values);
$signStr = ArrayUtil::createLinkstring($values);
switch($this->config->signType){
case 'MD5':
$sign = md5($signStr);
break;
default:
$sign = '';
}
return strtoupper($sign) === strtoupper($retSign);
} }
/** /**
* 向客户端返回必要的数据 * 向客户端返回必要的数据
* *
* @param array $data 回调机构返回的回调通知数据 * @param array $data
* @return array|false * @return void
*/ */
protected function getRetData(array $data){ protected function getRetData(array $data){
// TODO: Implement getRetData() method. // TODO: Implement getRetData() method.
if ($this->config->returnRaw) return array_merge($data, ['channel' => Config::LTF_CHARGE]);
$retData = [ $retData = [
'ins_cd' => $data['ins_cd'], //机构号 'return_code' => $data['code'],
'mchnt_cd' => $data['mchnt_cd'], //商户号 'return_msg' => $data['msg'],
'term_id' => $data['term_id'] ?? '', //终端号 'out_trade_no' => $data['outTradeNo'],
'user_id' => $data['user_id'] ?? '', //用户在商户的id 'transaction_id' => $data['transactionId'],
'buyer_id' => $data['reserved_buyer_logon_id'] ?? '', //买家在渠道登录账号 'pay_type' => $data['payType'],
'pay_time' => date('Y-m-d H:i:s', strtotime($data['txn_fin_ts'])),//支付完成时间 'total_fee' => $data['totalAmount'],
'amount' => $data['order_amt'], //订单金额 'user_id' => $data['buyerId'],
'amount_settle' => $data['settle_order_amt'], //应结订单金额 'out_transaction_id' => $data['outTransactionId'],
'transaction_id' => $data['transaction_id'] ?? '', //渠道交易流水号 'pay_time' => $data['payTime'],
'order_no' => $data['mchnt_order_no'] ?? '', //商户订单号, 商户系统内部的订单号 'channel' => Config::LTF_CHARGE,
'return_param' => $data['reserved_addn_inf'] ?? '', //附加数据
'channel' => Config::WX_CHARGE, //通道
]; ];
return $retData; return $retData;
} }
...@@ -101,7 +131,7 @@ class LTFNotify extends NotifyStrategy{ ...@@ -101,7 +131,7 @@ class LTFNotify extends NotifyStrategy{
* @return mixed * @return mixed
*/ */
protected function replyNotify($flag, $msg = 'OK'){ protected function replyNotify($flag, $msg = 'OK'){
return ($flag ? 1 : 0); return ($flag ? true : false);
// TODO: Implement replyNotify() method. // TODO: Implement replyNotify() method.
} }
} }
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!