Detaillierte Erläuterung eines einfachen Beispiels für die Entwicklung der UnionPay-Zahlungsschnittstelle in PHP

墨辰丷
Freigeben: 2023-03-28 20:18:02
Original
2611 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Methode zur Entwicklung der UnionPay-Zahlungsschnittstelle in PHP vor und analysiert den spezifischen Prozess und die damit verbundenen Betriebsfähigkeiten der PHP-UnionPay-Zahlungsschnittstellenentwicklung in Form von Beispielen

Zahlungsschnittstelle Mittlerweile gibt es Zahlungsschnittstellen von Drittanbietern und Bankzahlungsschnittstellen. Hier stellen wir die Methode zur Entwicklung der PHP-Version der UnionPay-Zahlungsschnittstelle vor.

Für die UnionPay-Zahlung müssen Sie zunächst zwei wichtige Teile beachten:

PHP-Betriebsumgebung ist 5.4.18 oder höher

Öffnen Sie die Erweiterung openssl

Die Beispiele im Entwicklungshandbuch dienen nur als Referenz, da sie grundsätzlich falsch sind. Sie können versuchen, für eine Demo auf die offizielle Website zu gehen. . . Beachten Sie, dass für die UnionPay-Entwicklung kein Testschlüssel bereitgestellt wird und nur in der offiziellen Umgebung entwickelt werden kann

Das Folgende ist eine Zahlungsklasse, die ich mit ThinkPHP geschrieben habe

/**
* 银联支付 v0.1
* @auther:Summer<dengwz7788@gmail.com>;
* @date:20151202
* **/
class NetPayAction extends BaseAction{
//在类初始化方法中,引入相关类库
public function _initialize() {
 header("Content-type:text/html;charset=utf-8");
 vendor(&#39;Netpay.util.common&#39;,"",".php"); //导入加密核心文件夹
 vendor(&#39;Netpay.util.SecssUtil&#39;,"",".class.php"); //导入加密核心文件夹
 vendor(&#39;Netpay.util.Settings_INI&#39;,"",".php"); //导入加密核心文件夹
 vendor(&#39;Netpay.util.Settings&#39;,"",".php"); //导入加密核心文件夹
 $this->securityPropFile= $_SERVER[&#39;DOCUMENT_ROOT&#39;] . "/ThinkPHP/Extend/Vendor/Netpay/config/security.properties"; //谁知道这是啥,反正他们要我加的
 $this->b2cPaySend = __APP__."/Index/NetPay/b2cPaySend";
 $this->b2cRefundSend = __APP__."/Index/NetPay/b2cRefundSend";
 $this->b2cQuerySend = __APP__."/Index/NetPay/b2cQuerySend";
 $this->;MerBgUrl = __APP__."/Index/NetPay/MerBgUrl";
 $this->MerPageUrl = __APP__."/Index/NetPay/MerPageUrl";
}
public function index()
{
 $paramArray=array (
   &#39;MerId&#39; => &#39;商户号&#39;,
   &#39;MerOrderNo&#39; => &#39;0000001944663232&#39;,
   &#39;OrderAmt&#39; => &#39;1&#39;,
   &#39;TranDate&#39; => &#39;20151219&#39;,
  &#39;TranTime&#39; =>&#39;171248&#39;,
  &#39;TranType&#39; => &#39;0001&#39;,
  &#39;BusiType&#39; =>&#39;0001&#39;,
  &#39;Version&#39; => &#39;20140728&#39;,
  &#39;CurryNo&#39; => &#39;CNY&#39;,
  &#39;AccessType&#39; =>; &#39;0&#39;,
  &#39;CommodityMsg&#39; => &#39;测试商品1号&#39;,
  &#39;MerPageUrl&#39; => $this->MerBgUrl,
  &#39;MerBgUrl&#39; =>$this->MerPageUrl,
  &#39;MerResv&#39; => &#39;MerResv&#39;,
 );
 if (count($paramArray) >0) {
  $dispatchUrl = $this->b2cPaySend;
  $transResvedJson = array();
  $cardInfoJson = array();
  $sendMap = array();
   foreach ($paramArray as $key => $value) {
   if (isEmpty($value)) {
    continue;
   }
   if (startWith($key, "trans_")) {
     $key = substr($key, strlen("trans_"));
        $transResvedJson[$key] = $value;
   } else
     if (startWith($key, "card_")) {
       $key = substr($key, strlen("card_"));
       $cardInfoJson[$key] = $value;
     } else {
       $sendMap[$key] = $value;
     }
  }
  $transResvedStr = null;
  $cardResvedStr = null;
  if (count($transResvedJson) >0) {
   $transResvedStr = json_encode($transResvedJson);
  }
  if (count($cardInfoJson) > 0) {
   $cardResvedStr = json_encode($cardInfoJson);
  }
 $secssUtil = new SecssUtil();
 if (! isEmpty($transResvedStr)) {
  $transResvedStr = $secssUtil->decryptData($transResvedStr);
  $sendMap["TranReserved"] = $transResvedStr;
  }
 if (! isEmpty($cardResvedStr)) {
   $cardResvedStr = $secssUtil->decryptData($cardResvedStr);
   $sendMap["card_"] = $cardResvedStr;
  }
  $securityPropFile = $this>securityPropFile;
  $secssUtil->init($securityPropFile);
  $secssUtil->sign($sendMap);
  $sendMap["Signature"] = $secssUtil->getSign();
  $_SESSION = $sendMap;
  header("Location:" . $dispatchUrl);
 }
}
public function b2cPaySend(){
  layout(false);
  $settings = new Settings_INI();
  $settings->oad($this->securityPropFile);
  $pay_url = "https://payment.chinapay.com/CTITS/service/rest/page/nref/000000000017/0/0/0/0/0";
  $html = "<form name=&#39;payment&#39; action=&#39;{$pay_url}&#39; method=&#39;POST&#39; target=&#39;_blank&#39;>;";
  $params = "TranReserved;MerId;MerOrderNo;OrderAmt;CurryNo;TranDate;SplitMethod;BusiType;MerPageUrl;MerBgUrl;SplitType;MerSplitMsg;PayTimeOut;MerResv;Version;BankInstNo;CommodityMsg;Signature;AccessType;AcqCode;OrderExpiryTime;TranType;RemoteAddr;Referred;TranTime;TimeStamp;CardTranData";
  foreach ($_SESSION as $k =>$v) {
   if (strstr($params, $k)) {
     $html .= "<input type=&#39;hidden&#39; name = &#39;" . $k . "&#39; value =&#39;" . $v . "&#39;/>";
   }
  }
    $html .= "<nput type=&#39;button&#39; type=&#39;hidden&#39; value=&#39;提交订单&#39; >";
    $html .= "<;/from>";
    $this->html = $html;
    $this->display();
}
public function pgReturn(){
 if ($_POST) {
   if (count($_POST) > 0) {
    $secssUtil = new SecssUtil();
    $securityPropFile = $this>securityPropFile;
    $secssUtil->init($securityPropFile);
    $text = array();
    foreach($_POST as $key=>$value){
      $text[$key] = urldecode($value);
    }
   if ($secssUtil->verify($text)) {
            //支付成功
     $_SESSION["VERIFY_KEY"] = "success";
   } else {
    //支付失败
     $_SESSION["VERIFY_KEY"] = "fail";
   }
  }
  }
 }
}
Nach dem Login kopieren

Die Zahlung mit UnionPay sollte relativ einfach sein! !

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

phpRealisieren Sie die Rückerstattungsfunktion der WeChat-Zahlung

phpAlipay-Serie Computer-Website-Zahlung

phpLeistungsanalyse von php-fpm langsames Ausführungsprotokoll langsame Protokollnutzung

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung eines einfachen Beispiels für die Entwicklung der UnionPay-Zahlungsschnittstelle in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!