/** * Gets the redirect target url. */ public function getRedirectUrl() { $data = $this->getData(); $params = array_except($data, 'merchantKey'); $merchantKey = $data['merchantKey']; $sTotalString = Utils::POSTDATA($this->endpoint, $params); $recv = $sTotalString["MSG"]; $recv = iconv('gb2312', 'utf-8', $recv); $recvArray = Utils::parseRecv($recv); $code = $recvArray["returnCode"]; $payUrl = false; if ($code != "000000") { // echo "code:" . $code . "</br>msg:" . decodeUtf8($recvArray["message"]); return $code . ':' . $recvArray["message"]; } else { $vfsign = $recvArray["merchantId"] . $recvArray["requestId"] . $recvArray["signType"] . $recvArray["type"] . $recvArray["version"] . $recvArray["returnCode"] . $recvArray["message"] . $recvArray["payUrl"]; $hmac = Utils::MD5sign($merchantKey, $vfsign); $vhmac = $recvArray["hmac"]; if ($hmac != $vhmac) { echo "验证签名失败!"; exit; } else { $payUrl = $recvArray["payUrl"]; //返回url处理 $rpayUrl = Utils::parseUrl($payUrl); $payUrl = $rpayUrl['url']; $this->redirectMethod = $rpayUrl['method']; } } return $payUrl; }
public function completePurchase(array $params = array()) { try { $merchantId = $params["merchantId"]; $payNo = $params["payNo"]; $returnCode = $params["returnCode"]; $message = $params["message"]; $signType = $params["signType"]; $type = $params["type"]; $version = $params["version"]; $amount = $params["amount"]; $amtItem = $params["amtItem"]; $bankAbbr = $params["bankAbbr"]; $mobile = $params["mobile"]; $orderId = $params["orderId"]; $payDate = $params["payDate"]; $accountDate = $params["accountDate"]; $reserved1 = $params["reserved1"]; $reserved2 = $params["reserved2"]; $status = $params["status"]; // $payType = $params["payType"]; $orderDate = $params["orderDate"]; $fee = $params["fee"]; $vhmac = $params["hmac"]; if ($returnCode != 00) { //此处表示后台通知产生错误 // echo $returnCode . decodeUtf8($message); return ['status' => false, 'message' => $returnCode . decodeUtf8($message)]; } $signData = $merchantId . $payNo . $returnCode . $message . $signType . $type . $version . $amount . $amtItem . $bankAbbr . $mobile . $orderId . $payDate . $accountDate . $reserved1 . $reserved2 . $status . $orderDate . $fee; $hmac = Utils::MD5sign($this->getParameter('app_key'), $signData); if ($hmac != $vhmac) { //此处无法信息数据来自手机支付平台 return ['status' => false, 'message' => '验签失败']; } else { return ['status' => true, 'message' => 'SUCCESS']; } } catch (\Exception $e) { return ['status' => false, 'message' => $e->getLine() . ':' . $e->getMessage()]; } }
/** * Get the raw data array for this message. The format of this varies from gateway to * gateway, but will usually be either an associative array, or a SimpleXMLElement. * * @return mixed */ public function getData() { $this->validate('app_id', 'app_key', 'character_set', 'sign_type', 'type', 'version', 'out_trade_no', 'subject', 'total_fee'); $signKey = $this->getParameter('app_key'); $characterSet = $this->getParameter('character_set'); $callbackUrl = $this->getParameter('return_url'); $notifyUrl = $this->getParameter('notify_url'); $ipAddress = $this->getParameter('client_ip'); $merchantId = $this->getParameter('app_id'); $requestId = $this->getParameter('request_id') ?: $this->getParameter('out_trade_no'); $signType = $this->getParameter('sign_type'); $type = $this->getParameter('type'); $version = $this->getParameter('version'); $amount = $this->getParameter('total_fee') * 100; $bankAbbr = $this->getParameter('bank'); $currency = '00'; $orderDate = date('Ymd'); $orderId = $this->getParameter('out_trade_no'); $merAcDate = date('Ymd'); $period = $this->getParameter('expired_time') ?: 10; $periodUnit = '00'; $merchantAbbr = $this->getParameter('merchant_abbr'); $productId = $this->getParameter('product_id') ?: $this->getParameter('out_trade_no'); $productName = iconv('utf-8', 'gb2312', $this->getParameter('subject')); $productDesc = iconv('utf-8', 'gb2312', $this->getParameter('summary')); // $productName = $this->getParameter('subject'); // $productDesc = $this->getParameter('summary'); $productNum = 1; $reserved1 = ''; $reserved2 = ''; $userToken = ''; $showUrl = ''; $couponsFlag = ''; $signData = $characterSet . $callbackUrl . $notifyUrl . $ipAddress . $merchantId . $requestId . $signType . $type . $version . $amount . $bankAbbr . $currency . $orderDate . $orderId . $merAcDate . $period . $periodUnit . $merchantAbbr . $productDesc . $productId . $productName . $productNum . $reserved1 . $reserved2 . $userToken . $showUrl . $couponsFlag; $hmac = Utils::MD5sign($signKey, $signData); $requestData = array(); $requestData["characterSet"] = $characterSet; $requestData["callbackUrl"] = $callbackUrl; $requestData["notifyUrl"] = $notifyUrl; $requestData["ipAddress"] = $ipAddress; $requestData["merchantId"] = $merchantId; $requestData["requestId"] = $requestId; $requestData["signType"] = $signType; $requestData["type"] = $type; $requestData["version"] = $version; $requestData["hmac"] = $hmac; $requestData["amount"] = $amount; $requestData["bankAbbr"] = $bankAbbr; $requestData["currency"] = $currency; $requestData["orderDate"] = $orderDate; $requestData["orderId"] = $orderId; $requestData["merAcDate"] = $merAcDate; $requestData["period"] = $period; $requestData["periodUnit"] = $periodUnit; $requestData["merchantAbbr"] = $merchantAbbr; $requestData["productDesc"] = $productDesc; $requestData["productId"] = $productId; $requestData["productName"] = $productName; $requestData["productNum"] = $productNum; $requestData["reserved1"] = $reserved1; $requestData["reserved2"] = $reserved2; $requestData["userToken"] = $userToken; $requestData["showUrl"] = $showUrl; $requestData["couponsFlag"] = $couponsFlag; $requestData['merchantKey'] = $signKey; return $requestData; }