'v1.0', //商户号 'type' => $data['pay_attr_code'], 'userId' => $data['partner_id'], 'requestNo' => $data['order_sn'], 'amount' => (string)(sprintf('%.2f', $data['money']) * 100), 'callBackURL' => $data['notify_url'], 'redirectUrl' => $data['pay_url'], ]; $payInfo['sign'] = md5($this->getSign($payInfo) . "key=" . $this->publicKey); $payInfo['attachData'] = 'DK'; $sRes = $this->httpPost($this->payUrl, $payInfo, 2); if (empty($sRes)) { $this->_lastError = '请求异常'; payLogger(__CLASS__, '请求异常data='.$sRes, $payInfo); return ''; } $aRes = json_decode($sRes, true); if (empty($aRes)) { $this->_lastError = '请求异常!'; payLogger(__CLASS__, '请求异常 (解析) data='.$sRes, $payInfo); return ''; } if ($aRes['status'] != 1 || $aRes['message'] != '000000') { $this->_lastError = '请求异常,请求失败'; payLogger(__CLASS__, '请求异常,请求失败 data='.$sRes, $payInfo); return ''; } return $aRes['payUrl']; } public function queryOrder($data, &$orderSn, &$money, $partnerId) { $queryInfo = [ 'userId' => $partnerId, 'requestNo' => $orderSn, 'orderNo' => $data['orderNo'], ]; $queryInfo['sign'] = md5($this->getSign($queryInfo) . "key=" . $this->publicKey); $sRes = $this->httpPostJson($this->queryUrl, $queryInfo); if (empty($sRes)) { $this->_lastError = '查询请求异常'; payLogger(__CLASS__, '查询请求异常 $queryInfo='.json_encode($queryInfo), $data); return ''; } $aRes = json_decode($sRes, true); if (empty($aRes)) { $this->_lastError = '查询解析异常'; payLogger(__CLASS__, '查询解析异常 data='.$sRes, $data); return ''; } if ($aRes['status'] != 3) { $this->_lastError = '查询订单状态异常'; payLogger(__CLASS__, '查询订单状态异常 data='.$sRes, $data); return ''; } if ($money != $aRes['amount']) { $this->_lastError = '查询订单金额异常'; payLogger(__CLASS__, '查询订单金额异常 data='.$sRes, $data); return ''; } return true; } public function notify(&$orderSn, &$tradeNo, &$money, $partnerId) { $data = request()->all(); if ($data['status'] != 3) { payLogger(__CLASS__, '回调订单状态失败', $data); return false; } $info = [ 'userId' => $partnerId, 'status' => $data['status'], 'amount' => $data['amount'], 'payAmount' => $data['payAmount'], 'requestNo' => $data['requestNo'], 'orderNo' => $data['orderNo'], 'payTime' => $data['payTime'], ]; if (isset($data['message'])) { $info['message'] = $data['message']; } $sign = md5($this->getSign($info) . "key=" . $this->publicKey); if ($sign != $data['sign']) { $this->_lastError = '验证失败!'; payLogger(__CLASS__, '验证失败 $sign='.$sign, $data); return false; } $money = $data['amount'] / 100; $res = $this->queryOrder($data, $data['requestNo'], $data['amount'], $partnerId); if (empty($res)) { return ''; } $orderSn = $data['requestNo']; $tradeNo = $data['orderNo']; return true; } public function stopNotify() { return '000000'; } }