<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/4/10 0010
 * Time: 17:05
 */

namespace app\modules\shops\v1\controllers;

use app\modules\sys\log\ImLog;
use app\modules\logic\model\PayLogModel;
use yii\web\Controller;
use app\modules\third\payment\Wxpay;
use app\modules\third\payment\H5pay;
use app\modules\common\Helper;
use app\modules\logic\services\AccountService;
use Yii;
class ReceiveController extends Controller
{
    //微信h5 回调
    public function actionWxpaycallback()
    {
        $result_str = file_get_contents("php://input");
        $version = 2.76;
        try {
            $pay = new Wxpay($version);
            ImLog::instance('wx_pay_callback.log')->Log($result_str);
            //验签
            $response_data = $pay->response($result_str);

            if ($response_data === false) {
                ImLog::instance('wx_pay_callback.log')->Log('验证签名失败：' . $result_str);
                return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
            }
            //订单信息确认
            $order_nid = $response_data['out_trade_no'];
            $PayLog = new PayLogModel();
            $pay_info = $PayLog->find()->where(['nid'=>$order_nid])->asArray()->one();
            //删除支付缓存
            if (!empty($pay_info)) {
                Helper::delPayLog([
                    'user_id' => $pay_info['sp_user_id'],
                    'order_type' => $pay_info['order_type'],
                    'pay_way' => 1,
                    'pay_money'=>$pay_info['pay_money'],
                    'order_id' => $pay_info['order_id']
                ]);
            }
            if (!empty($pay_info)) {
                if ($pay_info['status'] == 0) {
                    $note = '';
                    $status = 2;
                    if ($response_data['return_code'] == 'SUCCESS' and $response_data['result_code'] == 'SUCCESS') {
                        $status = 1;
                        $note = '支付成功-reback';
                        if (($pay_info['pay_money']) != $response_data['total_fee'] / 100.0) {
                            $note = "金额不一致,本地" . $pay_info['pay_money'] . '元;返回：' . $response_data['total_fee'] / 100.0 . '元';
                        }
                    } else {
                        if (isset($response_data['return_msg'])) {
                            $note = $response_data['return_msg'];
                        } else {
                            $note = $response_data['return_code'];
                        }
                    }
                     $data_update = [
                        'transaction_id'=>$response_data['transaction_id'],
                        'status' => $status,
                        'notify_time' => time(),
                        'notice' => $note,
                    ];
                    //支付成功创建响应逻辑
                    $result_save = AccountService::updatePayLog($data_update, $pay_info['id']);
                    if ($result_save) {
                        $msg = json_encode(['responseCode' => '00', 'responseMessage' => 'ok', 'pay_nid' => $order_nid]);
                    } else {
                        $msg = json_encode(['responseCode' => '110', 'responseMessage' => '保存失败']);
                    }
                }
            }else {
                $msg = json_encode(['responseCode' => '00', 'responseMessage' => '查询订单失败']);
                ImLog::instance('wx_pay_error.log')->Log($msg);
            }
        } catch (\Exception $e) {
            \Yii::warning($e->getMessage());
        }
        return '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
    }

}
