merchantId = env('blue_brother.merchant_id', 23329); $this->secretKey = env('blue_brother.merchant_key', '8db16e8cc8363ed4eb4c14f9520bcc32'); } /** * 直连天下提交充值处理 * @param string $orderNumber * @return true * @throws \BlueBrothers\Openapi\OpenapiException * @throws \app\exception\BusinessException */ public static function rechargeOrder(string $orderNumber) { $order = Order::getByOrderNumber($orderNumber); if ($order['pay_status'] == Order::PAY_STATUS_PAID && $order['order_status'] == Order::STATUS_WAIT_RECHARGE) { // 直连天下充值 $rechargeOrder = [ 'outTradeNo' => $order["order_number"],// 合作商系统内部订单号,同一商户下不可重复, 同微信、支付宝的out_trade_no类似 'productId' => $order["product_id"],// 商品编码 'number' => 1, 'notifyUrl' => config('cmb.recharge_notify_url'),// 异步通知地址 'rechargeAccount' => $order["account"],// 手机号,非必传 'accountType' => 1,// 充值账号类型,1:手机号,2:QQ号,0:其他 ]; $res = BlueBrothersClientUtil::getClient()->RechargeOrder($rechargeOrder); if ($res['code'] == 2000) { $order->order_status = Order::STATUS_RECHARGE_ING; $order->save(); } } return true; } /** * 充值回调 * @param $params * @return string * @throws \BlueBrothers\Openapi\OpenapiException * @throws \app\exception\BusinessException */ public function rechargeNotify($params) { Log::info('充值回调:' . json_encode($params)); $sign = Util::getSign($this->secretKey, $params); if ($params['sign'] != $sign) { return ''; } $orderNumber = $params['outTradeNo']; $status = $params['status']; $order = Order::getByOrderNumber($orderNumber); if ($order->order_status == Order::STATUS_RECHARGE_SUCCESS) { return 'success'; } switch ($status) { case '01': $orderStatus = Order::STATUS_RECHARGE_SUCCESS; break; case '03': $orderStatus = Order::STATUS_RECHARGE_FAIL; break; default: $orderStatus = Order::STATUS_RECHARGE_ING; break; } if ($status == '01' && $order->order_status == Order::STATUS_RECHARGE_ING) { // 充值成功更新协议扣款时间 $sign = Sign::getByAgreementId($order->agreement_id); $sign->agree_recharge_time = strtotime(date('Y-m-d')); $sign->save(); } $order->order_status = $orderStatus; $order->save(); if ($status == '03' && $order->refund_status == 0) { // 充值失败,退款 CmbService::refund($orderNumber); } if ($status == '04') { // 执行手动拉取 $this->queryRechargeOrder($orderNumber); } return 'success'; } /** * 主动拉取充值订单状态 * @param string $orderNumber * @return string|true * @throws \BlueBrothers\Openapi\OpenapiException * @throws \app\exception\BusinessException */ public function queryRechargeOrder(string $orderNumber) { $res = BlueBrothersClientUtil::getClient()->RechargeQuery($orderNumber); if ($res['code'] !== '0000') { return '查询失败'; } $status = $res['status']; switch ($status) { case '01': $orderStatus = Order::STATUS_RECHARGE_SUCCESS; break; case '03': $orderStatus = Order::STATUS_RECHARGE_FAIL; break; default: $orderStatus = Order::STATUS_RECHARGE_ING; break; } $order = Order::getByOrderNumber($orderNumber); if ($order->order_status == Order::STATUS_RECHARGE_SUCCESS) { return true; } if ($status == '01' && $order->order_status == Order::STATUS_RECHARGE_ING) { // 充值成功更新协议扣款时间 $sign = Sign::getByAgreementId($order->agreement_id); $sign->agree_recharge_time = strtotime(date('Y-m-d')); $sign->save(); } $order->order_status = $orderStatus; $order->save(); if ($status == '03' && $order->refund_status == 0) { CmbService::refund($orderNumber); } return true; } }