/**
  * 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;
 }
Example #2
0
 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;
 }