Commit 1f0aaaa5 by 赵成彬(PHP)

update

1 parent d6992397
Showing with 60 additions and 31 deletions
...@@ -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;
}
debug("-----LTF__NOTIFY".json_encode($params),'info');
return $params; return $params;
// TODO: Implement getNotifyData() method. // TODO: Implement getNotifyData() method.
} }
...@@ -48,48 +54,71 @@ class LTFNotify extends NotifyStrategy{ ...@@ -48,48 +54,71 @@ 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'] ?? ''; $data = ArrayUtil::removeKeys($retData, ['sign']);
return true;
$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 +130,7 @@ class LTFNotify extends NotifyStrategy{ ...@@ -101,7 +130,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!