当前位置:首页 » 编程语言 » php银联支付

php银联支付

发布时间: 2022-11-05 16:23:02

php怎么做银联的支付接口调用

PHP怎么做银联的支付接口调用就很简单了,首先要和银联签合约然后就有现成的技术文档和代码,直接集成就可以了

㈡ php网站怎么整合银联网上支付

大概分几步,
1,你自己的网站把要交易的数据post给银联,
2,银联处理你post过来的数据,然后用户输入一些账号信息,付款。
3,付款后,银联会post交易后的数据给你的网站,(这个地址会在开始你传给银联的的数据里面)
4,你接受银联传输回来的数据,自己处理!
注意的是,回调地址有个后台的,还有个前台的,不要搞混乱了!

㈢ ThinkPHP之银联支付(网页支付)

配置文件如下修改

㈣ PHP银联在线支付开发怎么自动跳转支付成功界面

在银联支付回调页面的地方 return_url 里面, 做个支付结果判断:
1、支付成功,则跳转到支付成功页面;
2、否则跳转到支付失败页面就可以了。

㈤ 中国银联在线支付接口php开发怎么做

可以参照第三方支付接口方法:

  1. 用户下单,收集购物车内产品的总价。

  2. 拼装支付参数URL跳转进入支付网关进行支付(这里会用到支付网关提供的SDK)。

  3. 支付成功。

  4. 支付网关服务器会异步发送支付成功的通知到你的“通知URL”,你对过来的参数进行有效性验证,确保是从支付网关发来的,进行业务逻辑处理,比如设置订单完成标识等操作。

    注意这不是“返回URL”,这一步操作前台支付用户不会看到。

  5. 网关一般在完成支付后,会自动返回网站,进入网站后提示用户完成支付,并跳转到相应页面即可。

  6. PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

㈥ 亲,php银联在线支付,没做过,请求帮助

支付接口现在有第三方的支付接口也有银行的支付接口。这里就来介绍php版本银联支付接口开发的方法。

银联支付,首先要注意二重要的部分:

PHP运行环境是5.4.18以上

开了扩展openssl

开发手册上面的列子只做参考,因为基本都是错的。你可以试着去官网下一个demo。。。注意现在银联开发,没有测试密钥提供,只能在正式环境开发

下面是我用ThinkPHP编写的一个支付类

/**
*银联支付v0.1
*@auther:Summer<[email protected]>;
*@date:20151202
***/
{
//在类初始化方法中,引入相关类库
publicfunction_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";
}
publicfunctionindex()
{
$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($paramArrayas$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=newSecssUtil();
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);
}
}
publicfunctionb2cPaySend(){
layout(false);
$settings=newSettings_INI();
$settings->oad($this->securityPropFile);
$pay_url="https://payment.chinapay.com/CTITS/service/rest/page/nref/000000000017/0/0/0/0/0";
$html="<formname='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($_SESSIONas$k=>$v){
if(strstr($params,$k)){
$html.="<inputtype='hidden'name='".$k."'value='".$v."'/>";
}
}
$html.="<nputtype='button'type='hidden'value='提交订单'>";
$html.="<;/from>";
$this->html=$html;
$this->display();
}
publicfunctionpgReturn(){
if($_POST){
if(count($_POST)>0){
$secssUtil=newSecssUtil();
$securityPropFile=$this>securityPropFile;
$secssUtil->init($securityPropFile);
$text=array();
foreach($_POSTas$key=>$value){
$text[$key]=urldecode($value);
}
if($secssUtil->verify($text)){
//支付成功
$_SESSION["VERIFY_KEY"]="success";
}else{
//支付失败
$_SESSION["VERIFY_KEY"]="fail";
}
}
}
}
}

银联支付应该是算比较简单的!!

㈦ 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\t<input 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' => 'https://101.231.204.80:5000/gateway/api/frontTransReq.do', //前台交易请求地址
//'singleQueryUrl' => 'https://101.231.204.80:5000/gateway/api/queryTrans.do', //单笔查询请求地址
'signCertPath' => __DIR__.'/../keys/unionpay/test/sign/700000000000001_acp.pfx', //签名证书路径
'signCertPwd' => '000000', //签名证书密码
'verifyCertPath' => __DIR__.'/../keys/unionpay/test/verify/verify_sign_acp.cer', //验签证书路径
'merId' => 'xxxxxxx',
//正式环境参数
//'frontUrl' => 'https://101.231.204.80:5000/gateway/api/frontTransReq.do', //前台交易请求地址
//'singleQueryUrl' => 'https://101.231.204.80:5000/gateway/api/queryTrans.do', //单笔查询请求地址
//'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问题 遇到Cannot redeclare hex2bin()

你重复定义了hex2bin()这个方法,或者是某个包含有hex2bin方法的文件你引用了两次。

㈩ 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="https://mybank.icbc.com.cn/" 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>

热点内容
c语言元编程 发布:2025-01-11 09:53:02 浏览:342
线切割割圆怎么编程 发布:2025-01-11 09:52:23 浏览:171
怎么选女孩子的配置 发布:2025-01-11 09:47:33 浏览:670
python获取header 发布:2025-01-11 09:47:32 浏览:492
iis7上传大小 发布:2025-01-11 09:41:38 浏览:507
拍摄脚本是什么工作 发布:2025-01-11 09:39:12 浏览:785
魅族安卓8什么时候更新 发布:2025-01-11 09:27:58 浏览:362
电脑板我的世界登录密码多少 发布:2025-01-11 09:15:43 浏览:284
编译原理和是非终结符吗 发布:2025-01-11 09:15:42 浏览:252
网络调试助手源码 发布:2025-01-11 09:14:24 浏览:117