761 lines
36 KiB
PHP
761 lines
36 KiB
PHP
<?php
|
|
namespace app\controllers\channelApi;
|
|
use app\models\common\ZiJie;
|
|
use Illuminate\Support\Facades\DB;
|
|
use WechatPay\GuzzleMiddleware\Util\AesUtil;
|
|
use Yii;
|
|
use yii\web\Controller;
|
|
use app\models\common\WeChat;
|
|
use app\models\common\Ali;
|
|
use app\models\common\CallbackOrder;
|
|
use EasyWeChat\Factory;
|
|
class PayNoticeController extends Controller{
|
|
public $enableCsrfValidation = false;
|
|
//外卖订单回调
|
|
public function actionOrderNotice(){
|
|
$input = file_get_contents('php://input');//json串
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_takeout_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_takeout_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$openid=$message['openid'];
|
|
$user=(new \yii\db\Query())
|
|
->from('{{%ybwm_member}}')
|
|
->where('openId=:openId AND uniacid=:uniacid', [':openId' => $openid,':uniacid'=>$order['uniacid']])->one();
|
|
if($user['id']!=$order['userId']){//代付
|
|
$replaceUserId=$user['id'];
|
|
}else{
|
|
$replaceUserId=0;
|
|
}
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
//付款模式 1普通模式,2服务商模式'
|
|
$payType=1;
|
|
if($sub_mch_id){
|
|
$payType=2;
|
|
}
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_takeout_order}}', ['replaceUserId'=>$replaceUserId,'transaction_id'=>$message['transaction_id'],'payType'=>$payType,'subMchId'=>$sub_mch_id],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::order($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
$response->send(); // return $response;
|
|
}
|
|
//外卖订单回调-fuiou
|
|
public function actionOrderNotices(){
|
|
$input = file_get_contents('php://input');//json串
|
|
// $res= FromXml($input);
|
|
|
|
$input_str = substr($input,4);
|
|
$ob = simplexml_load_string(urldecode(urldecode($input_str)));
|
|
$res = json_decode(json_encode($ob,true),true);
|
|
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_takeout_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['mchnt_order_no']])->one();
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($res['result_msg'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$transaction = Yii::$app->db->beginTransaction(); //开始事务
|
|
try{
|
|
$logData['total_money'] = number_format($res['order_amt'] / 100, 2);
|
|
$logData['pay_order'] = $res['mchnt_order_no'];
|
|
$logData['pay_channel'] = 1;
|
|
$logData['op_user_id'] = $order['userId'] ? $order['userId'] : 0;//小程序下单由下单人为操作者
|
|
$logData['order_type'] = 2;
|
|
$logData['result_msg'] = $res['result_msg'];
|
|
$logData['result_code'] = $res['result_code'];
|
|
$logData['bind_id'] = $order['bind_id'];
|
|
$logData['pay_status'] = 2;
|
|
$logData['remark'] = '小程序订单';
|
|
$now_time = time();
|
|
$logData['pay_time'] = $now_time;
|
|
$logData['create_time'] = $now_time;
|
|
YII::$app->db->createCommand()->insert('{{%ybwm_paychannel_payment_log}}', $logData)->execute();
|
|
|
|
$payType=1;
|
|
$updata = [
|
|
'payType' => $payType,
|
|
'payAt' => $res['txn_fin_ts'] ? strtotime($res['txn_fin_ts']) : time(),
|
|
];
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_takeout_order}}', $updata,'outTradeNo=:outTradeNo', [':outTradeNo' => $res['mchnt_order_no']])->execute();
|
|
$res1=CallbackOrder::order($order['id'],1);
|
|
if(!$res1){
|
|
return false;
|
|
}
|
|
} catch (RequestException $e) {
|
|
$transaction->rollBack();//事务回滚
|
|
return false;
|
|
}
|
|
$transaction->commit();
|
|
} else {
|
|
return false;
|
|
}
|
|
return true; // 返回处理完成
|
|
}
|
|
//充值订单(富友)
|
|
public function actionBalanceOrderNotices()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
// $res= FromXml($input);
|
|
|
|
$input_str = substr($input,4);
|
|
$ob = simplexml_load_string(urldecode(urldecode($input_str)));
|
|
$res = json_decode(json_encode($ob,true),true);
|
|
|
|
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_balance_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['mchnt_order_no']])->one();
|
|
|
|
// 使用通知里的 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉 ,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($res['result_msg'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$transaction = Yii::$app->db->beginTransaction(); //开始事务
|
|
try{
|
|
$logData['total_money'] = number_format($res['order_amt'] / 100, 2);
|
|
$logData['pay_order'] = $res['mchnt_order_no'];
|
|
$logData['pay_channel'] = 1;
|
|
$logData['op_user_id'] = $order['userId'] ? $order['userId'] : 0;//小程序下单由下单人为操作者
|
|
$logData['result_msg'] = $res['result_msg'];
|
|
$logData['result_code'] = $res['result_code'];
|
|
$logData['bind_id'] = $order['bind_id'];
|
|
$logData['pay_status'] = 2;
|
|
$logData['order_type'] = 3;//小程序充值订单
|
|
$logData['remark'] = '小程序充值订单';
|
|
$logData['pay_time'] = $res['txn_fin_ts'] ? strtotime($res['txn_fin_ts']) : time();
|
|
$logData['create_time'] = time();
|
|
YII::$app->db->createCommand()->insert('{{%ybwm_paychannel_payment_log}}', $logData)->execute();
|
|
|
|
$updata = [
|
|
'payType' => 1,
|
|
'payAt' => $res['txn_fin_ts'] ? strtotime($res['txn_fin_ts']) : time(),
|
|
];
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_user_balance_order}}', $updata,'outTradeNo=:outTradeNo', [':outTradeNo' => $res['mchnt_order_no']])->execute();
|
|
// 用户是否支付成功
|
|
$res=CallbackOrder::balanceOrder($order['id'],1);
|
|
if(!$res){
|
|
return false;
|
|
}
|
|
} catch (RequestException $e) {
|
|
$transaction->rollBack();//事务回滚
|
|
return false;
|
|
}
|
|
$transaction->commit();
|
|
} else {
|
|
return false;
|
|
}
|
|
return true; // 返回处理完成
|
|
}
|
|
//充值订单(微信)
|
|
public function actionBalanceOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_balance_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_balance_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
$payType=1;
|
|
if($sub_mch_id){
|
|
$payType=2;
|
|
}
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_user_balance_order}}', ['transaction_id'=>$message['transaction_id'],'payType'=>$payType,'subMchId'=>$sub_mch_id],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::balanceOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
|
|
$response->send(); // return $response;
|
|
}
|
|
//积分商城订单
|
|
public function actionIntegralOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_integral_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_integral_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_integral_order}}', ['transaction_id'=>$message['transaction_id'],'subMchId'=>$sub_mch_id],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::integralOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
|
|
$response->send(); // return $response;
|
|
}
|
|
|
|
//券包订单
|
|
public function actionRollBagOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_roll_bag_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_roll_bag_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
$payType=1;
|
|
if($sub_mch_id){
|
|
$payType=2;
|
|
}
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_roll_bag_order}}', ['transaction_id'=>$message['transaction_id'],'payType'=>$payType,'subMchId'=>$sub_mch_id],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::rollBagOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
|
|
$response->send(); // return $response;
|
|
}
|
|
//收银订单
|
|
public function actionCashierOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_cashier_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_cashier_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
$payType=1;
|
|
if($sub_mch_id){
|
|
$payType=2;
|
|
}
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_cashier_order}}', ['transaction_id'=>$message['transaction_id'],'payType'=>$payType,'subMchId'=>$sub_mch_id],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::cashierOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
|
|
$response->send(); // return $response;
|
|
}
|
|
//快餐订单
|
|
public function actionFastOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
$payType=1;
|
|
if($sub_mch_id){
|
|
$payType=2;
|
|
}
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_instore_order}}', ['transaction_id'=>$message['transaction_id'],'payType'=>$payType,'subMchId'=>$sub_mch_id],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::fastOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
|
|
$response->send(); // return $response;
|
|
}
|
|
//店内订单
|
|
public function actionInstoreOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['payAt']) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
$payType=1;
|
|
if($sub_mch_id){
|
|
$payType=2;
|
|
}
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_instore_order}}', ['transaction_id'=>$message['transaction_id'],'payType'=>$payType,'subMchId'=>$sub_mch_id,'payAt'=>time()],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
$res=CallbackOrder::instoreOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
|
|
$response->send(); // return $response;
|
|
}
|
|
//店内订单-富友支付回调地址
|
|
public function actionInstoreOrderNotices()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
// $res= FromXml($input);
|
|
|
|
$input_str = substr($input,4);
|
|
$ob = simplexml_load_string(urldecode(urldecode($input_str)));
|
|
$res = json_decode(json_encode($ob,true),true);
|
|
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['mchnt_order_no']])->one();
|
|
|
|
if (!$order || $order['payAt']) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($res['result_msg'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$transaction = Yii::$app->db->beginTransaction(); //开始事务
|
|
try{
|
|
$logData['total_money'] = number_format($res['order_amt'] / 100, 2);
|
|
$logData['pay_order'] = $res['mchnt_order_no'];
|
|
$logData['pay_channel'] = 1;
|
|
$logData['op_user_id'] = $order['userId'] ? $order['userId'] : 0;//小程序下单由下单人为操作者
|
|
$logData['order_type'] = 2;
|
|
$logData['result_msg'] = $res['result_msg'];
|
|
$logData['result_code'] = $res['result_code'];
|
|
$logData['bind_id'] = $order['bind_id'];
|
|
$logData['pay_status'] = 2;
|
|
$logData['remark'] = '小程序订单';
|
|
$now_time = time();
|
|
$logData['pay_time'] = $now_time;
|
|
$logData['create_time'] = $now_time;
|
|
YII::$app->db->createCommand()->insert('{{%ybwm_paychannel_payment_log}}', $logData)->execute();
|
|
|
|
$payType=1;
|
|
$updata = [
|
|
'payType' => $payType,
|
|
'payAt' => $res['txn_fin_ts'] ? strtotime($res['txn_fin_ts']) : time(),
|
|
];
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_instore_order}}', $updata,'outTradeNo=:outTradeNo', [':outTradeNo' => $res['mchnt_order_no']])->execute();
|
|
$res=CallbackOrder::instoreOrder($order['id'],1);
|
|
if(!$res){
|
|
return false;
|
|
}
|
|
} catch (RequestException $e) {
|
|
$transaction->rollBack();//事务回滚
|
|
return false;
|
|
}
|
|
$transaction->commit();
|
|
} else {
|
|
return false;
|
|
}
|
|
return true; // 返回处理完成
|
|
}
|
|
//付费会员
|
|
public function actionVipOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_vip_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_vip_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['state']!=1) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_user_vip_order}}', ['transaction_id'=>$message['transaction_id']],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::vipOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
$response->send(); // return $response;
|
|
}
|
|
//预约
|
|
public function actionAppointmentOrderNotice()
|
|
{
|
|
$input = file_get_contents('php://input');
|
|
$res= FromXml($input);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_appointment}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $res['out_trade_no']])->one();
|
|
|
|
$app = Factory::payment(WeChat::getWxPayConfig($order['uniacid'],1,$order['storeId']));
|
|
$response = $app->handlePaidNotify(function($message, $fail){
|
|
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
|
|
//$order = 查询订单($message['out_trade_no']);
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_appointment}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->one();
|
|
|
|
if (!$order || $order['state']==3) { // 如果订单不存在 或者 订单已经支付过了
|
|
return true; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
|
|
}
|
|
if ($message['return_code'] === 'SUCCESS') { // return_code 表示通信状态,不代表支付状态
|
|
$sub_mch_id=$message['sub_mch_id']?:'';
|
|
$payType=1;
|
|
if($sub_mch_id){
|
|
$payType=2;
|
|
}
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_appointment}}', ['transaction_id'=>$message['transaction_id'],'payType'=>$payType,'subMchId'=>$sub_mch_id],'outTradeNo=:outTradeNo', [':outTradeNo' => $message['out_trade_no']])->execute();
|
|
// 用户是否支付成功
|
|
if (array_get($message, 'result_code') === 'SUCCESS') {
|
|
$res=CallbackOrder::appointmentOrder($order['id'],1);
|
|
if(!$res){
|
|
return $fail('修改订单状态失败');
|
|
}
|
|
}
|
|
} else {
|
|
return $fail('通信失败,请稍后再通知我');
|
|
}
|
|
return true; // 返回处理完成
|
|
});
|
|
|
|
$response->send(); // return $response;
|
|
}
|
|
|
|
public function actionAliApplicationNotice(){
|
|
$result=axios_request();
|
|
$biz_content=json_decode($result['biz_content'],true);
|
|
$info=(new \yii\db\Query())
|
|
->from('{{%ybwm_ali_store}}')
|
|
->where('order_id=:order_id',[':order_id'=>$biz_content['order_id']])->one();
|
|
if($info){
|
|
Yii::$app->db->createCommand()->update('{{%ybwm_ali_store}}', ['shop_id'=>$biz_content['shop_id']],['order_id'=>$biz_content['order_id']])->execute();
|
|
}
|
|
}
|
|
//头条回调
|
|
public function actionTouTiaoNotice(){
|
|
$postData = file_get_contents('php://input');
|
|
//file_put_contents('toutiao.log',$postData);
|
|
$data=json_decode($postData,true);
|
|
$msgData=json_decode($data['msg'],true);
|
|
$cp_extra=json_decode($msgData['cp_extra'],true);
|
|
$set = Config::getSystemSet('toutiao', $cp_extra['uniacid']);
|
|
$token=$set['token'];
|
|
$sing=ZiJie::noticeSign($data,$token);
|
|
if($sing!=$data['msg_signature']){
|
|
return false;
|
|
}
|
|
if($cp_extra['orderType']==1){
|
|
//外卖回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_takeout_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::order($order['id'],3);
|
|
}
|
|
if($cp_extra['orderType']==2){
|
|
//充值回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_balance_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::balanceOrder($order['id'],3);
|
|
}
|
|
if($cp_extra['orderType']==3){
|
|
//积分商城回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_integral_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::integralOrder($order['id'],3);
|
|
}
|
|
if($cp_extra['orderType']==4){
|
|
//券包回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_roll_bag_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::rollBagOrder($order['id'],3);
|
|
}
|
|
if($cp_extra['orderType']==5){
|
|
//收银回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_cashier_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::cashierOrder($order['id'],3);
|
|
}
|
|
if($cp_extra['orderType']==6){
|
|
//快餐回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
$res=CallbackOrder::fastOrder($order['id'],3);
|
|
|
|
}
|
|
if($cp_extra['orderType']==7){
|
|
//堂食回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::instoreOrder($order['id'],3);
|
|
|
|
}
|
|
if($msgData['cp_extra']['orderType']==8){
|
|
//付费会员
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_vip_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::vipOrder($order['id'],3);
|
|
}
|
|
if($cp_extra['orderType']==9){
|
|
//预约
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_appointment}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $msgData['cp_orderno']])->one();
|
|
$res=CallbackOrder::appointmentOrder($order['id'],3);
|
|
}
|
|
if($res){
|
|
return '{
|
|
"err_no": 0,
|
|
"err_tips": "success"
|
|
}';
|
|
}
|
|
return false;
|
|
}
|
|
//支付宝回调
|
|
public function actionAliNotice(){
|
|
parse_str($_POST['passback_params'],$passback_params);
|
|
$uniacid=$passback_params['uniacid'];
|
|
$res=Ali::verifyNotify($uniacid,$_POST);
|
|
if($res['code']==1){
|
|
if($passback_params['orderType']==1){
|
|
//外卖回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_takeout_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
Ali::sync($order['uniacid'],$order['id'],1);//同步订单到支付宝
|
|
$res=CallbackOrder::order($order['id'],2);
|
|
}
|
|
if($passback_params['orderType']==2){
|
|
//充值回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_balance_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
$res=CallbackOrder::balanceOrder($order['id'],2);
|
|
}
|
|
if($passback_params['orderType']==3){
|
|
//积分商城回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_integral_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
$res=CallbackOrder::integralOrder($order['id'],2);
|
|
}
|
|
if($passback_params['orderType']==4){
|
|
//券包回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_roll_bag_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
$res=CallbackOrder::rollBagOrder($order['id'],2);
|
|
}
|
|
if($passback_params['orderType']==5){
|
|
//收银回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_cashier_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
$res=CallbackOrder::cashierOrder($order['id'],2);
|
|
}
|
|
if($passback_params['orderType']==6){
|
|
//快餐回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
Ali::sync($order['uniacid'],$order['id'],3);//同步订单到支付宝
|
|
$res=CallbackOrder::fastOrder($order['id'],2);
|
|
|
|
}
|
|
if($passback_params['orderType']==7){
|
|
//堂食回调
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_instore_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
Ali::sync($order['uniacid'],$order['id'],2);//同步订单到支付宝
|
|
$res=CallbackOrder::instoreOrder($order['id'],2);
|
|
|
|
}
|
|
if($passback_params['orderType']==8){
|
|
//付费会员
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_user_vip_order}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
$res=CallbackOrder::vipOrder($order['id'],2);
|
|
}
|
|
if($passback_params['orderType']==9){
|
|
//预约
|
|
$order = (new \yii\db\Query())
|
|
->from('{{%ybwm_appointment}}')
|
|
->where('outTradeNo=:outTradeNo', [':outTradeNo' => $_POST['out_trade_no']])->one();
|
|
$res=CallbackOrder::appointmentOrder($order['id'],2);
|
|
}
|
|
if(!$res){
|
|
echo 'fail';
|
|
}else{
|
|
echo 'success';
|
|
}
|
|
}else{
|
|
echo 'fail';
|
|
}
|
|
|
|
}
|
|
// //头条回调
|
|
// public function actionTouTiaoRefundNotice(){
|
|
// $postData = file_get_contents('php://input');
|
|
// $data=json_decode($postData,true);
|
|
// $sing=ZiJie::noticeSign($data);
|
|
// if($sing!=$data['msg_signature']){
|
|
// return false;
|
|
// }
|
|
// $msgData=json_decode($data['msg'],true);
|
|
// $cp_extra=json_decode($msgData['cp_extra'],true);
|
|
// if($res){
|
|
// return '{
|
|
// "err_no": 0,
|
|
// "err_tips": "success"
|
|
// }';
|
|
// }
|
|
// return false;
|
|
//
|
|
// }
|
|
|
|
|
|
|
|
}
|