public function notifyAction($notifyType, $channel, $gateway) { do { $ret = $this->_checkParams($channel, $gateway); if ($ret['err_code'] !== ErrCode::ERR_SUCCESS) { return $ret['err_msg']; } $notice = $this->_getPayNotifyArgs($channel, $gateway); if (!$notice) { $errMsg = '验证失败'; return $errMsg; } } while (0); $ret = SerNotifyBiz::getInstance()->payNotify($notice, $notifyType); return $ret->is_success == 'T' ? $ret->output : $ret->error; }
public function refund($order) { $ret = new \stdClass(); $ret->haveNotify = false; $config = self::getConfig($order); if (!$config) { $ret->is_success = 'F'; $ret->error = "不存在的交易号:{$order['ser_recharge_no']}"; return $ret; } //使用退款接口 $refundObj = new \Refund_pub($config); $refundObj->setParameter("transaction_id", $order['ser_recharge_no']); //微信订单号 $refundObj->setParameter("out_refund_no", $order['mer_refund_no']); //商户退款单号 $refundObj->setParameter("total_fee", $order['recharge_amount']); //总金额 $refundObj->setParameter("refund_fee", $order['refund_amount']); //退款金额 $refundObj->setParameter("op_user_id", $config['partner']); //操作员 //$refundObj->setParameter("out_trade_no", 'xxxx') ; //商户订单号 //$refund->setParameter("sub_mch_id","XXXX") ; //子商户号 //$refund->setParameter("device_info","XXXX") ; //设备号 //调用结果 $refundResult = $refundObj->getResult(); if ($refundResult["return_code"] == "SUCCESS") { if ($refundResult['result_code'] == 'SUCCESS') { for ($i = 0; $i < 3; $i++) { sleep(1); $refundQueryResult = $this->refundQuery($order); if ($refundQueryResult->is_success == 'T' && $refundQueryResult->code == 1) { $notice = ['type' => 'refund', 'mer_refund_no' => $order['mer_refund_no'], 'ser_refund_no' => $order['ser_refund_no'], 'notify_status' => 2, 'notify_log' => 'SUCCESS', 'notify_time' => time(), 'refund_time' => time()]; SerNotifyBiz::getInstance()->payNotify($notice, 'refund'); break; } } } else { $ret->is_success = 'F'; $ret->code = 998; $ret->error = '提交业务失败:retmsg=' . $refundResult['err_code_des']; } } else { $ret->is_success = 'F'; $ret->code = 999; $ret->exception = true; $ret->error = '通信失败:retmsg=' . $refundResult['err_code_des']; } return $ret; }
public function seConfirmTrans($job, $data) { $errCode = 0; $transOrder = TransModel::find($data['id'])->first(); do { if (!$transOrder || $transOrder->status != TransModel::STATUS_DEFAULT) { $errCode = 1; break; } if (!$transOrder->gateway || !$transOrder->channel) { $errCode = 2; break; } if (false === ($channel = ChannelUtil::calculateAccountChannel($transOrder->channel))) { $errCode = 3; break; } $gatewayObj = gatewayUtil::getGatewayObj($transOrder->gateway); if (!$gatewayObj) { $errCode = 4; break; } if (!method_exists($gatewayObj, 'transQuery')) { $errCode = 5; break; } } while (0); if ($errCode == 0) { $order = ['channel' => $channel, 'gateway' => $transOrder->gateway, 'batch_no' => $transOrder->batch_no, 'mer_trans_no' => $transOrder->mer_trans_no]; $notice = $gatewayObj->transQuery($order); $ret = SerNotifyBiz::getInstance()->payNotify($notice, 'trans'); if ($ret->is_success == 'T') { $job->delete(); } else { $job->release(60 * 60); } } else { $job->delete(); } }