123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- <?php
- namespace JinDouYun\Controller\Common;
- use JinDouYun\Dao\Finance\DAccountType;
- use JinDouYun\Dao\Finance\DExpenseSingle;
- use JinDouYun\Dao\Market\DVipCardOrder;
- use JinDouYun\Model\Finance\MAccount;
- use JinDouYun\Model\Finance\MExpenseSingle;
- use JinDouYun\Model\Shop\MShopCardOrder;
- use JinDouYun\Model\Shop\MShopSubscribe;
- use Mall\Framework\Core\ErrorCode;
- use Mall\Framework\Core\ResultWrapper;
- use Mall\Framework\Factory;
- use Mall\Framework\Core\StatusCode;
- use JinDouYun\Controller\BaseController;
- use JinDouYun\Model\Order\MOrder;
- use JinDouYun\Model\Market\MVipCard;
- use JinDouYun\Model\System\MPaymentSetting;
- class WeiXinPayNotify extends BaseController
- {
-
- private $partnerKey = '45c87Fa0352211e78D40d4977a9Ea871';
- public function __construct($isCheckAcl = false, $isMustLogin = false, $checkToken = false)
- {
- parent::__construct($isCheckAcl, $isMustLogin, $checkToken);
- }
-
- public function notify()
- {
- $postStr = file_get_contents('php://input');
- file_put_contents('/www/wwwroot/logs/apiqnys.liuniukj.com/weixinpay.log',date('Y-m-d H:i:s').'回调数据'.var_export($postStr,true).PHP_EOL,FILE_APPEND);
-
-
- if (!empty($postStr)) {
- libxml_disable_entity_loader(true);
-
- $data = json_decode(json_encode(simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
- ksort($data);
- $buff = '';
- foreach ($data as $k => $v){
- if($k != 'sign'){
- $buff .= $k . '=' . $v . '&';
- }
- }
- if(empty($data['attach'])){
- $this->weixinErrorEcho('附加数据为空');
- }
- $attach = explode('|', $data['attach']);
- $enterpriseId = $attach[0];
- unset($attach[0]);
- $userCentId = $attach[1];
- unset($attach[1]);
-
- $objMPaymentSetting = new MPaymentSetting($userCentId, $enterpriseId);
- $result = $objMPaymentSetting->getPayData(StatusCode::$payType['wxPay']);
- if (!$result->isSuccess() || empty($result->getData())) {
- $this->weixinErrorEcho('获取微信配置错误');
- }
- $payment = $result->getData();
-
- $stringSignTemp = $buff . 'key='.$payment['apiPartnerKey'];
- $sign = strtoupper(md5($stringSignTemp));
- if($sign !== $data['sign']){
- $this->weixinErrorEcho('签名错误');
- }
-
- $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
-
- if ($postObj->return_code == 'SUCCESS') {
-
- if ($postObj->result_code == 'SUCCESS') {
- $response_content = (array)$postObj;
- $data = array(
- 'attach' => $response_content['attach'],
- 'transaction_id' => $response_content['transaction_id'],
- 'out_trade_no' => $response_content['out_trade_no'],
- 'time_end' => $response_content['time_end'],
- 'total_fel' => $response_content['total_fee'] / 100,
- );
- if(empty($data['attach'])){
- $this->weixinErrorEcho('附加数据为空');
- }
- $attach = explode('|', $data['attach']);
- $enterpriseId = $attach[0];
- unset($attach[0]);
- $userCentId = $attach[1];
- unset($attach[1]);
- $allOrdersId = array_values($attach);
-
- if (strpos( $data['out_trade_no'],'tmp') === false || substr($data['out_trade_no'],0,3) == 'tmp') {
- $updateOrderData = [
- 'outerTradeNo' => $data['transaction_id'],
- 'payType' => StatusCode::$payType['wxPay'],
- 'payStatus' => StatusCode::$standard,
- 'orderStatus' => StatusCode::$orderStatus['waitDelivery'],
- 'payTime' => strtotime($data['time_end']),
- 'total_fel'=> $data['total_fel'],
- 'pay_way'=>StatusCode::$payType['wxPay']
- ];
- $objMOrder = new MOrder($userCentId, $enterpriseId);
- if(strpos( $data['out_trade_no'],'tmp') === false){
- $result = $objMOrder->updateOrderPayData($updateOrderData, ['id'=>$allOrdersId,'no'=>$data['out_trade_no']],true);
- }else{
- $result = $objMOrder->updateOrderPayData($updateOrderData, ['id'=>$allOrdersId,'outerTradeNo'=>$data['out_trade_no']],true);
- }
- if($result->isSuccess()){
- $result = array(
- 'return_code' => 'SUCCESS',
- 'return_msg' => 'OK',
- );
- echo arrayToWeiXinXml($result);
- exit();
- }else{
- $this->weixinErrorEcho($result->getData());
- }
- }
-
- if (strpos( $data['out_trade_no'],'tmp') !== false && substr($data['out_trade_no'],0,3) == 'vip') {
- $vipOrderData = [
- 'outerTradeNo' => $data['transaction_id'],
- 'payType' => StatusCode::$payType['wxPay'],
- 'payStatus' => StatusCode::$standard,
- 'payTime' => strtotime($data['time_end']),
- ];
- $objMVipCard = new MVipCard($enterpriseId, $userCentId);
-
- $result = $objMVipCard->updateVipOrderPayData($vipOrderData, ['id'=>$allOrdersId,'outerTradeNo'=>$data['out_trade_no']],true);
-
- $objDVipCard = new DVipCardOrder();
- $objDVipCard->setTable('qianniao_vip_card_order_'.$enterpriseId);
-
- $objDAccountType = new DAccountType('finance');
- $objDAccountType->setTable('qianniao_account_type');
- if($result->isSuccess()){
-
-
- $accountTypeResult = $objDAccountType->query('select * from qianniao_account_type where type = '.StatusCode::$standard.' and name like "%会员卡%"');
- if($accountTypeResult === false){
- $this->weixinErrorEcho($objDAccountType->error());
- }
- if(empty($accountTypeResult)){
- $accountTypeDate = [
- 'enterpriseId' => $enterpriseId,
- 'name' => '会员卡',
- 'type' => StatusCode::$standard,
- 'remarks' => '购买会员卡',
- 'createTime' => time()
- ];
- $accountTypeInsert = $objDAccountType->insert($accountTypeDate);
- if($accountTypeInsert === false){
- $this->weixinErrorEcho($objDAccountType->error());
- }
- }
-
- foreach ($allOrdersId as $cardOrderId) {
- $vipCardResult = $objDVipCard->get($cardOrderId);
- if($vipCardResult === false){
- $this->weixinErrorEcho($objDVipCard->error());
- }
-
- $objMAccount = new MAccount($enterpriseId, $userCentId);
- $defaultAccountResult = $objMAccount->getDefaultAccount($vipCardResult['payType']);
- if ($defaultAccountResult->isSuccess() == false) {
- $this->weixinErrorEcho($defaultAccountResult->getData());
- }
- $defaultAccount = $defaultAccountResult->getData();
- if(empty($defaultAccount)){
- $this->weixinErrorEcho('支付方式对应的银行账户为空');
- }
-
-
- $expenseSingleData = [
- 'currentUnitId' => $vipCardResult['customerId'],
- 'currentUnit' => $vipCardResult['customerName'],
- 'type' => StatusCode::$delete,
- 'billTime' => time(),
- 'manager' => '',
- 'shopId' => $vipCardResult['shopId'],
- 'shopName' => '',
- 'consumeTypeId' => !empty($accountTypeResult)? $accountTypeResult[0]['id'] : $accountTypeInsert,
- 'consumeTypeName' => !empty($accountTypeResult)? $accountTypeResult[0]['name'] : $accountTypeDate['name'],
- 'totalCollectionAmount' => $vipCardResult['payAmount'],
- 'totalPreferentialAmount' => 0,
- 'totalActualAmount' => $vipCardResult['payAmount'],
- 'payType' => StatusCode::$standard,
- 'auditStatus' => StatusCode::$auditStatus['auditing'],
- 'deleteStatus' => StatusCode::$standard,
- 'expenseSingleAccountDate'=> [
- [
- 'expenseName' => 'vip会员卡收入',
- 'amount' => $vipCardResult['payAmount'],
- 'settlementMethodId' => StatusCode::$payType['wxPay'],
- 'settlementAccount' => StatusCode::$payType[1],
- 'accountId' => $defaultAccount['id'],
- 'preferentialAmount' => 0
- ]
- ]
- ];
-
- $objMExpenseSingle = new MExpenseSingle($enterpriseId, $userCentId);
- $expenseSingleResult = $objMExpenseSingle->addExpenseSingle($expenseSingleData);
- if ($expenseSingleResult->isSuccess() == false) {
- $this->weixinErrorEcho($expenseSingleResult->getData());
- }
-
- $updateExpenseSingle = $objMExpenseSingle->updateExpenseStatus(['id'=>$expenseSingleResult->getData(),'createTime'=>time()]);
- if ($updateExpenseSingle->isSuccess() == false) {
- $this->weixinErrorEcho($updateExpenseSingle->getData());
- }
- }
- $result = array(
- 'return_code' => 'SUCCESS',
- 'return_msg' => 'OK',
- );
- echo arrayToXml($result);
- exit();
- }else{
- $this->weixinErrorEcho($result->getData());
- }
- }
-
- if (substr($data['out_trade_no'],0,2) == 'wx') {
- $Msub = new MShopSubscribe($enterpriseId);
- $subOrder = $Msub->details(['order_id' => $data['out_trade_no']]);
- $subOrder = $subOrder->getData();
- if ($subOrder['paid'] == 1){
-
- $result = array(
- 'return_code' => 'SUCCESS',
- 'return_msg' => 'OK',
- );
- echo arrayToXml($result);
- exit();
- }
- $res = $Msub->paySuccess($data['out_trade_no']);
- if ($res){
- $result = array(
- 'return_code' => 'SUCCESS',
- 'return_msg' => 'OK',
- );
- echo arrayToXml($result);
- exit();
- }else{
- $this->weixinErrorEcho('失败');
- }
- }
-
- if (substr($data['out_trade_no'],0,2) == 'car') {
- $Mcard = new MShopCardOrder($enterpriseId);
- $order = $Mcard->details(['order_id' => $data['out_trade_no']]);
- $order = $order->getData();
- if ($order['paid'] == 1){
-
- $result = array(
- 'return_code' => 'SUCCESS',
- 'return_msg' => 'OK',
- );
- echo arrayToXml($result);
- exit();
- }
- $res = $Mcard->paySuccess($data['out_trade_no']);
- if ($res){
- $result = array(
- 'return_code' => 'SUCCESS',
- 'return_msg' => 'OK',
- );
- echo arrayToXml($result);
- exit();
- }else{
- $this->weixinErrorEcho('失败');
- }
- }
- $this->weixinErrorEcho('out_trade_no错误');
- } else {
- $this->weixinErrorEcho($postObj->err_code.':'.$postObj->err_code_des);
- }
- } else {
- $this->weixinErrorEcho($postObj->return_msg);
- }
- }else{
- $this->weixinErrorEcho('微信回调数据为空');
- }
- }
-
- public function weixinErrorEcho($errorMsg){
- $result = array(
- 'return_code' => 'FAIL',
- 'return_msg' => $errorMsg,
- );
- echo arrayToWeiXinXml($result);
- exit();
- }
- }
|