php銀聯支付最新demo,php支付系統

本文目錄一覽:

求php銀聯支付簡單demo(unionpay)

?php

namespace common\services;

class UnionPay

{

/**

* 支付配置

* @var array

*/

public $config = [];

/**

* 支付參數,提交到銀聯對應接口的所有參數

* @var array

*/

public $params = [];

/**

* 自動提交表單模板

* @var string

*/

private $formTemplate = ‘HTML’

!DOCTYPE HTML

html

head

meta charset=”utf-8″

title支付/title

/head

body

div style=”text-align:center”跳轉中…/div

form id=”pay_form” name=”pay_form” action=”%s” method=”post”

%s

/form

script type=”text/javascript”

document.onreadystatechange = function(){

if(document.readyState == “complete”) {

document.pay_form.submit();

}

};

/script

/body

/html

HTML;

/**

* 構建自動提交HTML表單

* @return string

*/

public function createPostForm()

{

$this-params[‘signature’] = $this-sign();

$input = ”;

foreach($this-params as $key = $item) {

$input .= “\t\tinput type=\”hidden\” name=\”{$key}\” value=\”{$item}\”\n”;

}

return sprintf($this-formTemplate, $this-config[‘frontUrl’], $input);

}

/**

* 驗證簽名

* 驗簽規則:

* 除signature域之外的所有項目都必須參加驗簽

* 根據key值按照字典排序,然後用拼接key=value形式待驗簽字符串;

* 然後對待驗簽字符串使用sha1算法做摘要;

* 用銀聯公鑰對摘要和簽名信息做驗簽操作

*

* @throws \Exception

* @return bool

*/

public function verifySign()

{

$publicKey = $this-getVerifyPublicKey();

$verifyArr = $this-filterBeforSign();

ksort($verifyArr);

$verifyStr = $this-arrayToString($verifyArr);

$verifySha1 = sha1($verifyStr);

$signature = base64_decode($this-params[‘signature’]);

$result = openssl_verify($verifySha1, $signature, $publicKey);

if($result === -1) {

throw new \Exception(‘Verify Error:’.openssl_error_string());

}

return $result === 1 ? true : false;

}

/**

* 取簽名證書ID(SN)

* @return string

*/

public function getSignCertId()

{

return $this-getCertIdPfx($this-config[‘signCertPath’]);

}

/**

* 簽名數據

* 簽名規則:

* 除signature域之外的所有項目都必須參加簽名

* 根據key值按照字典排序,然後用拼接key=value形式待簽名字符串;

* 然後對待簽名字符串使用sha1算法做摘要;

* 用銀聯頒發的私鑰對摘要做RSA簽名操作

* 簽名結果用base64編碼後放在signature域

*

* @throws \InvalidArgumentException

* @return multitype|string

*/

private function sign() {

$signData = $this-filterBeforSign();

ksort($signData);

$signQueryString = $this-arrayToString($signData);

if($this-params[‘signMethod’] == 01) {

//簽名之前先用sha1處理

//echo $signQueryString;exit;

$datasha1 = sha1($signQueryString);

$signed = $this-rsaSign($datasha1);

} else {

throw new \InvalidArgumentException(‘Nonsupport Sign Method’);

}

return $signed;

}

/**

* 數組轉換成字符串

* @param array $arr

* @return string

*/

private function arrayToString($arr)

{

$str = ”;

foreach($arr as $key = $value) {

$str .= $key.’=’.$value.”;

}

return substr($str, 0, strlen($str) – 1);

}

/**

* 過濾待簽名數據

* signature域不參加簽名

*

* @return array

*/

private function filterBeforSign()

{

$tmp = $this-params;

unset($tmp[‘signature’]);

return $tmp;

}

/**

* RSA簽名數據,並base64編碼

* @param string $data 待簽名數據

* @return mixed

*/

private function rsaSign($data)

{

$privatekey = $this-getSignPrivateKey();

$result = openssl_sign($data, $signature, $privatekey);

if($result) {

return base64_encode($signature);

}

return false;

}

/**

* 取.pfx格式證書ID(SN)

* @return string

*/

private function getCertIdPfx($path)

{

$pkcs12certdata = file_get_contents($path);

openssl_pkcs12_read($pkcs12certdata, $certs, $this-config[‘signCertPwd’]);

$x509data = $certs[‘cert’];

openssl_x509_read($x509data);

$certdata = openssl_x509_parse($x509data);

return $certdata[‘serialNumber’];

}

/**

* 取.cer格式證書ID(SN)

* @return string

*/

private function getCertIdCer($path)

{

$x509data = file_get_contents($path);

openssl_x509_read($x509data);

$certdata = openssl_x509_parse($x509data);

return $certdata[‘serialNumber’];

}

/**

* 取簽名證書私鑰

* @return resource

*/

private function getSignPrivateKey()

{

$pkcs12 = file_get_contents($this-config[‘signCertPath’]);

openssl_pkcs12_read($pkcs12, $certs, $this-config[‘signCertPwd’]);

return $certs[‘pkey’];

}

/**

* 取驗證簽名證書

* @throws \InvalidArgumentException

* @return string

*/

private function getVerifyPublicKey()

{

//先判斷配置的驗簽證書是否銀聯返回指定的證書是否一致

if($this-getCertIdCer($this-config[‘verifyCertPath’]) != $this-params[‘certId’]) {

throw new \InvalidArgumentException(‘Verify sign cert is incorrect’);

}

return file_get_contents($this-config[‘verifyCertPath’]);

}

}

//銀聯支付設置

‘unionpay’ = [

//測試環境參數

‘frontUrl’ = ”, //前台交易請求地址

//’singleQueryUrl’ = ”, //單筆查詢請求地址

‘signCertPath’ = __DIR__.’/../keys/unionpay/test/sign/700000000000001_acp.pfx’, //簽名證書路徑

‘signCertPwd’ = ‘000000’, //簽名證書密碼

‘verifyCertPath’ = __DIR__.’/../keys/unionpay/test/verify/verify_sign_acp.cer’, //驗簽證書路徑

‘merId’ = ‘xxxxxxx’,

//正式環境參數

//’frontUrl’ = ”, //前台交易請求地址

//’singleQueryUrl’ = ”, //單筆查詢請求地址

//’signCertPath’ = __DIR__.’/../keys/unionpay/test/sign/PM_700000000000001_acp.pfx’, //簽名證書路徑

//’signCertPwd’ = ‘000000’, //簽名證書密碼

//’verifyCertPath’ = __DIR__.’/../keys/unionpay/test/verify/verify_sign_acp.cer’, //驗簽證書路徑

//’merId’ = ‘xxxxxxxxx’, //商戶代碼

],

親,php銀聯在線支付,沒做過,請求幫助

支付接口現在有第三方的支付接口也有銀行的支付接口。這裡就來介紹php版本銀聯支付接口開發的方法。

銀聯支付,首先要注意二重要的部分:

PHP運行環境是5.4.18以上

開了擴展openssl

開發手冊上面的列子只做參考,因為基本都是錯的。你可以試着去官網下一個demo。。。注意現在銀聯開發,沒有測試密鑰提供,只能在正式環境開發

下面是我用ThinkPHP編寫的一個支付類

/**

* 銀聯支付 v0.1

* @auther:Summerdengwz7788@gmail.com;

* @date:20151202

* **/

class NetPayAction extends BaseAction{

//在類初始化方法中,引入相關類庫

public function _initialize() {

 header(“Content-type:text/html;charset=utf-8”);

 vendor(‘Netpay.util.common’,””,”.php”); //導入加密核心文件夾

 vendor(‘Netpay.util.SecssUtil’,””,”.class.php”); //導入加密核心文件夾

 vendor(‘Netpay.util.Settings_INI’,””,”.php”); //導入加密核心文件夾

 vendor(‘Netpay.util.Settings’,””,”.php”); //導入加密核心文件夾

 $this-securityPropFile= $_SERVER[‘DOCUMENT_ROOT’] . “/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 (

   ‘MerId’ = ‘商戶號’,

   ‘MerOrderNo’ = ‘0000001944663232’,

   ‘OrderAmt’ = ‘1’,

   ‘TranDate’ = ‘20151219’,

  ‘TranTime’ =’171248′,

  ‘TranType’ = ‘0001’,

  ‘BusiType’ =’0001′,

  ‘Version’ = ‘20140728’,

  ‘CurryNo’ = ‘CNY’,

  ‘AccessType’ =; ‘0’,

  ‘CommodityMsg’ = ‘測試商品1號’,

  ‘MerPageUrl’ = $this-MerBgUrl,

  ‘MerBgUrl’ =$this-MerPageUrl,

  ‘MerResv’ = ‘MerResv’,

 );

 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 = $thissecurityPropFile;

  $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 = “”;

  $html = “form name=’payment’ action='{$pay_url}’ method=’POST’ target=’_blank’;”;

  $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=’hidden’ name = ‘” . $k . “‘ value ='” . $v . “‘/”;

   }

  }

    $html .= “nput type=’button’ type=’hidden’ value=’提交訂單’ “;

    $html .= “;/from”;

    $this-html = $html;

    $this-display();

}

public function pgReturn(){

 if ($_POST) {

   if (count($_POST)  0) {

    $secssUtil = new SecssUtil();

    $securityPropFile = $thissecurityPropFile;

    $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”;

   }

  }

  }

 }

}

銀聯支付應該是算比較簡單的!!

PHP怎麼做銀聯的支付接口調用

PHP做銀聯支付接口調用問題

//在工商支付接口之前要找到工行提供的接口文件級dll文件

//將訂單簽名數據公鑰加密提供給工行指定頁面

//組織要簽名的數據串

$src=”ICBC_PERBANK_B2C1.0.0.0″.$infomer[“merid”].$infomer[“meracct”].$returnaddress.”HS”.$ddnumber.$amount.”0010″.$nowtime.”0″;

$com=new com(‘ICBCEBANKUTIL.B2CUtil’);

$rc=$com-init(“c:\WINDOWS\user.crt”,”c:\WINDOWS\user.crt”,”c:\WINDOWS\user.key”,”11111111″);

$ssrc=$com-signC($src, strlen($src)); //訂單簽名數據

$rc=$com-verifySignC($src,strlen($src), $ssrc, strlen($ssrc));

$cert=$com-getCert(1); //商城證書公鑰

//將商戶證書存儲到c:\WINDOWS目錄下,然後創建form表單,將指定的數據提交到工行指定的網頁中

!–支付寶支付的接口操作,提交的數據–

td width=”100″a href=”{$link}”img src=”images/sy_19.gif” width=”90″ height=”25″ border=”0″/a/td

!–——————————————————–

!–工行支付的接口操作,提交的數據–

form action=”” method=”post” name=”form_bank”

input name=”interfaceName” type=”hidden” value=”ICBC_PERBANK_B2C”/

input name=”interfaceVersion” type=”hidden” value=”1.0.0.0″/

input name=”orderid” type=”hidden” value=”{$ddnumber}”/

input name=”amount” type=”hidden” value=”{$amount}”/

input name=”curType” type=”hidden” value=”001″/

input name=”merID” type=”hidden” value=”{$merid}”/

input name=”merAcct” type=”hidden” value=”{$meracct}”/

input name=”verifyJoinFlag” type=”hidden” value=”0″/

input name=”notifyType” type=”hidden” value=”HS”/

input name=”merURL” type=”hidden” value=”{$returnaddress}”/

input name=”resultType” type=”hidden” value=”0″/

input name=”orderDate” type=”hidden” value=”{$nowtime}”/

input name=”merSignMsg” type=”hidden” value=”{$ssrc}” /

input name=”merCert” type=”hidden” value=”{$cert}” /

/form

中國銀聯在線支付接口php開發怎麼做

對方應該有sdk和demo提供的,支付接口的流程都差不多,包括支付寶,網銀,財付通,paypal等流程都一樣。

用戶下單,收集購物車內產品的總價

拼裝支付參數URL跳轉進入支付網關進行支付(這裡會用到支付網關提供的SDK)

支付成功

支付網關服務器會異步發送支付成功的通知到你的“通知URL”,你對過來的參數進行有效性驗證,確保是從支付網關發來的,進行業務邏輯處理,比如設置訂單完成標識等操作;

注意這不是“返回URL”,這一步操作前台支付用戶不會看到。

網關一般在完成支付後,會自動返回我們的網站,進入網站後提示用戶完成支付,並跳轉到相應頁面即可。

PHP銀聯在線支付開發怎麼自動跳轉支付成功界面

在銀聯支付回調頁面的地方 return_url 裡面, 做個支付結果判斷:

1、支付成功,則跳轉到支付成功頁面;

2、否則跳轉到支付失敗頁面就可以了。

原創文章,作者:NNUNU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/330611.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NNUNU的頭像NNUNU
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • C++最新標準的詳細闡述

    一、auto關鍵字的使用 auto關鍵字的使用是C++11最受歡迎的新特性之一。使用auto關鍵字可以自動推斷變量的類型,這樣大大減少了代碼的冗餘。例如: auto i = 1; …

    編程 2025-04-25
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台服務器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24

發表回復

登錄後才能評論