return_code != 'SUCCESS') { Yii::warning('return_code error:' . $postObj->return_code); util::end(); } $orderSn = $postObj->out_trade_no; $total_fee = $postObj->total_fee; $totalFee = $total_fee / 100; $attach = $postObj->attach; //接收流水类型、代金劵 parse_str($attach); $couponId = isset($couponId) ? $couponId : 0; //流水类型 $capitalType = isset($capitalType) ? $capitalType : null; $wxPayType = isset($wxPayType) ? $wxPayType : 0; if (isset($capitalType) == false) { Yii::warning('capitalType empty,orderId:' . $orderSn); util::end(); } $callbackParams = ['wxPayType' => $wxPayType]; $return = xhPayToolService::wxPay($callbackParams, $orderSn, $totalFee, $capitalType, $couponId);//支付回调流程 if (isset($return['code']) && $return['code'] == 'A0002') { Yii::warning('callback exec and failed,capitalType:' . $capitalType . ' orderSn:' . $orderSn); util::end(); } echo ''; } //支付宝异步通知 public function actionAlipayCallback() { echo '此方法还没有调试'; Yii::$app->end(); header("Content-type: text/html; charset=utf-8"); $alipayWap = Yii::getAlias("@vendor/alipayWap"); $orderSn = $_POST['out_trade_no'];//商户订单号 $pay = xhOrderService::getByOrderSn($orderSn); if (empty($pay)) { Yii::warning('没有找到订单:orderSn:' . $orderSn); util::end(); } $orderId = $pay['id'];//商户订单号 $merchantId = isset($pay['merchantId']) ? $pay['merchantId'] : 0; $extend = MerchantExtendService::getByMerchantId($merchantId); $config = [ //应用ID,您的APPID。 'app_id' => $extend['alipayPId'], //商户私钥,您的原始格式RSA私钥 'merchant_private_key' => $extend['alipayKey'], //异步通知地址 'notify_url' => Yii::$app->params['frontUrl'] . "/notice/alipay-async", //同步跳转 'return_url' => "", //编码格式 'charset' => "UTF-8", //签名方式 'sign_type' => "RSA2", //支付宝网关 'gatewayUrl' => "https://openapi.alipay.com/gateway.do", //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 'alipay_public_key' => $extend['alipayPublicKey'], ]; require_once($alipayWap . '/wappay/service/AlipayTradeService.php'); require_once($alipayWap . '/wappay/buildermodel/AlipayTradeQueryContentBuilder.php');//查询接口 $arr = $_POST; $alipaySevice = new \AlipayTradeService($config); $alipaySevice->writeLog(var_export($_POST, true)); $result = $alipaySevice->check($arr); Yii::info('check:' . $result); if ($result) {//验证成功 $tradeNo = $_POST['trade_no'];//支付宝交易号 $tradeStatus = $_POST['trade_status'];//交易状态 $totalFee = $_POST['total_amount']; $appId = $_POST['app_id']; $passbackParams = $_POST['passback_params']; $passbackParams = urldecode($passbackParams); parse_str($passbackParams);//接收流水类型、代金劵 $couponId = isset($couponId) ? $couponId : 0; $capitalType = isset($capitalType) ? $capitalType : null;//流水类型 $RequestBuilder = new \AlipayTradeQueryContentBuilder(); $RequestBuilder->setTradeNo($tradeNo); $queryResult = $alipaySevice->Query($RequestBuilder); $alipayId = $queryResult->buyer_user_id; $alipayAccount = $queryResult->buyer_logon_id;//买家的支付宝帐号,不完整,带*号 $alipayParams = ['alipayId' => $alipayId, 'alipayAccount' => $alipayAccount]; if (isset($capitalType) == false) { Yii::warning('capitalType empty, orderId:' . $orderId); util::end(); } if ($config['app_id'] != $appId) { Yii::warning('app_id disagree, orderId:' . $orderId . ' config app_id:' . $config['app_id'] . ' appId:' . $appId); util::end(); } if ($tradeStatus == 'TRADE_FINISHED' || $tradeStatus == 'TRADE_SUCCESS') { $callbackParams = []; $return = xhPayToolService::alipay($callbackParams, $orderSn, $totalFee, $capitalType, $couponId, $alipayParams);//支付回调流程 if ($return['code'] == 'A0002') { Yii::warning('callback exec and failed,capitalType:' . $capitalType . ' orderId:' . $orderId); util::end(); } } //请不要修改或删除 echo "success"; util::end(); } //请不要修改或删除 echo "fail"; } /* * { "signature": "aaaaaaaaaaaaaaaaaa", //签名 "client_id": "270340107542552", 返回达达运单号,默认为空 "order_id": "111111111111", 添加订单接口中的origin_id值 "order_status": 4, 订单状态(待接单=1,待取货=2,配送中=3,已完成=4,已取消=5, 指派单=8,妥投异常之物品返回中=9, 妥投异常之物品返回完成=10, 骑士到店=100,创建达达运单失败=1000 可参考文末的状态说明) "cancel_reason": "", 订单取消原因,其他状态下默认值为空字符串 "cancel_from": 0, 订单取消原因来源(1:达达配送员取消;2:商家主动取消;3:系统或客服取消;0:默认值) "dm_id": 1, 达达配送员id,接单以后会传 "dm_name": "测试", 配送员姓名,接单以后会传 "dm_mobile": "13100001111", 配送员手机号,接单以后会传 "update_time": 1511789475 更新时间 } */ public function actionExpressCallBack() { $postStr = file_get_contents('php://input');//接收微信服务器返回的json消息体 Yii::warning("dada call back params: ". $postStr); if (empty($postStr)) { util::end(); } $postData = json_decode($postStr, true); if(empty($postData)){ Yii::warning("dada callback json_decode error"); } //订单号 $orderSn = $postData['order_id']; $sign = $postData['signature']; //签名验证?没有 //判断订单是否存在 $orderInfo = OrderClass::getByOrderSn($orderSn); if(!$orderInfo){ Yii::warning("dada callback error: 订单不不存在: ".$orderSn); util::end(); } $orderStatus = $postData['order_status']; $orderSn = $orderInfo['orderSn']; $sjId = $orderInfo['merchantId'] ?? 0; $sendTime = $orderInfo['$orderInfo']; switch ($orderStatus){ case DadaExpressServices::ORDER_WAIT_ACCEPT: //待接单, 即下单成功: 处理相应的业务逻辑(订单状态变更,消息通知?) break; case DadaExpressServices::ORDER_WAIT_PICKUP: //待收货 todo break; case DadaExpressServices::ORDER_SENDING: //配送中 todo OrderExpressClass::updateExpressStatus($orderSn,OrderExpressClass::STATUS_RECEIVE); break; case DadaExpressServices::ORDER_COMPLETE: //订单完成 todo OrderExpressClass::updateExpressStatus($orderSn,OrderExpressClass::STATUS_COMPLETE); OrderSendClass::reach($orderInfo); break; case DadaExpressServices::ORDER_CANCEL: //取消 todo $cancel_reason = $postData['cancel_reason']; //取消理由 OrderExpressClass::updateExpressStatus($orderSn,OrderExpressClass::STATUS_CANCEL); break; case DadaExpressServices::ORDER_WAIT_DISPATCH: //指派单 todo break; case DadaExpressServices::ORDER_UNUSUAL_BACK: //妥投异常之物品返回中 todo break; case DadaExpressServices::ORDER_UNUSUAL_COMPLETE: //妥投异常之物品返回完成 todo break; case DadaExpressServices::RIDER_TO_SHOP: //骑士到店 todo break; case DadaExpressServices::ORDER_FAIL: //失败 todo OrderExpressClass::updateExpressStatus($orderSn,OrderExpressClass::STATUS_CANCEL); break; default: } echo "success"; util::end(); } }