108 行
3.4 KiB
PHP
可执行文件
108 行
3.4 KiB
PHP
可执行文件
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: yang
|
|
* Date: 2021/7/29
|
|
* Time: 15:04
|
|
*/
|
|
|
|
namespace Pay\Controller;
|
|
|
|
use Think\Controller;
|
|
|
|
//[1.9.5]
|
|
|
|
/**
|
|
* 钱客云支付回调
|
|
* Class UuController
|
|
* @package Pay\Controller
|
|
*/
|
|
class MoneyGuestController extends BaseController
|
|
{
|
|
|
|
private static $appKey = '';//商户测试秘钥
|
|
|
|
|
|
//钱客云小程序支付回调
|
|
public function notify()
|
|
{
|
|
$postArr = file_get_contents('php://input');//post传递,字符串
|
|
file_put_contents('./MoneyGuest.txt', date('Y-m-d H:i:s') . ' notify1:' . $postArr . "\r\n", FILE_APPEND);
|
|
$post = json_decode($postArr, true);//json解码
|
|
|
|
//验签
|
|
$PayOrderModel = new \Common\Model\RetailPaySetModel;
|
|
$where = [
|
|
'qian_ke_mid' => $post['mid'],
|
|
];
|
|
$fields = 'qian_ke_key';
|
|
//获取秘钥
|
|
self::$appKey = $PayOrderModel->getFindField($where, $fields);//获取钱客云商户密钥
|
|
|
|
$sign = $this->signGenerate($post);//加签
|
|
|
|
//签名比对
|
|
if ($sign !== $post['sign']) {
|
|
//签名错误
|
|
return "success";
|
|
}
|
|
file_put_contents('./MoneyGuest.txt', date('Y-m-d H:i:s') . ' notify2: 验签成功' . "\r\n", FILE_APPEND);
|
|
|
|
if ($post && $post['status'] == 2) {
|
|
//存在,支付状态等于2
|
|
|
|
//修改数据库数据
|
|
$PayOrderModel = D('RetailPayOrder');
|
|
$Order = $PayOrderModel->getFind(array('out_trade_no' => strval($post['outTradeNo'])));
|
|
|
|
file_put_contents('./MoneyGuest.txt', date('Y-m-d H:i:s') . ' notify3: ' . M()->_sql() . "\r\n", FILE_APPEND);
|
|
if (!empty($Order)) {
|
|
if ($Order['order_state'] == 'WAIT_BUYER_PAY') {
|
|
$updateData = array(
|
|
$PayOrderModel::ORDER_STATE => 'SUCCESS',
|
|
$PayOrderModel::EXTEND_CONTENT => $postArr,
|
|
$PayOrderModel::TRADE_DATE => time(),
|
|
$PayOrderModel::TRADE_NO => $post['orderNumber']
|
|
);
|
|
$PayOrderModel->updateOrder(array($PayOrderModel::ID => $Order[$PayOrderModel::ID]), $updateData); //更新pay_order表
|
|
$this->doAddRate($post['orderNumber'], $Order, 7); //增加代理商合伙人分润记录
|
|
R($Order[$PayOrderModel::NOTIFY_URL], array($Order));//执行回调函数
|
|
}
|
|
}
|
|
return "success";
|
|
} else {
|
|
return "success";
|
|
}
|
|
exit;
|
|
}
|
|
|
|
|
|
/**
|
|
*生成签名字符串
|
|
* @param $arr : 数据
|
|
* @return string
|
|
*/
|
|
private function signGenerate($arr)
|
|
{
|
|
unset($arr['sign']);//去除sign
|
|
ksort($arr, SORT_STRING); //按照键名排序
|
|
$stringSignTemp = '';
|
|
foreach ($arr as $k => $v) {
|
|
//取非空参数
|
|
if ($v) {
|
|
if (is_array($v)) {
|
|
$v = json_encode($v);
|
|
$stringSignTemp .= $k . '=' . $v . '&';
|
|
} else {
|
|
$stringSignTemp .= $k . '=' . $v . '&';
|
|
}
|
|
}
|
|
}
|
|
$stringSignTemp = $stringSignTemp . 'key=' . self::$appKey;//待加签字符串
|
|
$signValue = md5($stringSignTemp);//MD5加签
|
|
$sign = strtolower($signValue);//字符转换为小写
|
|
return $sign;
|
|
}
|
|
|
|
|
|
} |