$data['partner_id'], //商户号 'productId' => $data['pay_attr_code'], 'mchOrderNo' => $data['order_sn'], 'amount' => $data['money'] * 100, "clientIp" => $data['ip'] ?: '127.0.0.0', "device" => 'ios10.3.1', 'notifyUrl' => $data['notify_url'], 'returnUrl' => $data['pay_url'], 'subject' => 'shop', 'body' => 'XSJ', 'extra' => date('YmdHis'), 'version' => '1.0' ]; $payInfo['sign'] = strtoupper(md5($this->getSign($payInfo) . 'key=' . $this->publicKey)); $sRes = $this->httpPost($this->payUrl, $payInfo); 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['retCode'] != self::SUCESS_CODE) { $this->_lastError = '请求异常,请求失败'; payLogger(__CLASS__, '请求异常,请求失败 data='.$sRes, $payInfo); return ''; } return $aRes['payParams']['payUrl']; } public function queryOrder($data, &$orderSn, &$money, $partnerId) { $queryInfo = [ 'mchId' => $partnerId, 'payOrderId' => $data['payOrderId'], 'mchOrderNo' => $orderSn, ]; $queryInfo['sign'] = strtoupper(md5($this->getSign($queryInfo) . 'key=' . $this->publicKey)); $sRes = $this->httpPost($this->queryUrl, $queryInfo); if (empty($sRes)) { $this->_lastError = '查询请求异常'; payLogger(__CLASS__, '查询请求异常 $queryInfo='.json_encode($queryInfo), $data); return ''; } $aRes = json_decode($sRes, true); if (empty($sRes)) { $this->_lastError = '查询解析异常'; payLogger(__CLASS__, '查询解析异常 data='.$sRes, $data); return ''; } if ($aRes['retCode'] != self::SUCESS_CODE) { $this->_lastError = '查询订单状态异常'; payLogger(__CLASS__, '查询订单状态异常'.json_encode($data)); return ''; } if ($money != $aRes['amount']) { $this->_lastError = '查询订单金额异常'; payLogger(__CLASS__, '查询订单金额异常'.json_encode($data)); return ''; } return true; } public function notify(&$orderSn, &$tradeNo, &$money, $partnerId) { $data = request()->all(); if (!($data['status'] == self::STATUS_CODE || $data['status'] == 3)) { payLogger(__CLASS__, '回调订单状态失败!'.json_encode($data)); return false; } $info = [ 'payOrderId' => $data['payOrderId'], 'mchId' => $partnerId, 'productId' => $data['productId'], 'mchOrderNo' => $data['mchOrderNo'], 'amount' => $data['amount'], 'income' => $data['income'], 'status' => $data['status'], 'income' => $data['income'], 'backType' => $data['backType'], ]; if (!empty($data['paySuccTime'])) { $info['paySuccTime'] = $data['paySuccTime']; } if (!empty($data['channelOrderNo'])) { $info['channelOrderNo'] = $data['channelOrderNo']; } $sign = strtoupper(md5($this->getSign($info) . 'key=' . $this->publicKey)); if ($sign != $data['sign']) { $this->_lastError = '验证失败!'; logger(json_encode($data) . ':验证失败!'); return false; } $authMoney = $data['amount']; $res = $this->queryOrder($data, $data['mchOrderNo'], $authMoney, $partnerId); if (empty($res)) { return ''; } $money = $data['amount'] / 100; $orderSn = $data['mchOrderNo']; $tradeNo = $data['payOrderId']; return true; } public function stopNotify() { return 'success'; } }