文件
mashangyoujiu/Application/Pay/Controller/MoneyGuestController.class.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;
}
}