好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php支付接口签名 php支付接口开发

很多站长朋友们都不太清楚php支付接口签名,今天小编就来给大家整理php支付接口签名,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 PHP 工商银行B2C支付接口怎么做 2、 php 支付宝接口官方给的md5签名版本和rsa签名版本的区别 3、 PHP怎么做银联的支付接口调用 4、 用PHP做微信支付签名错误,请教一下这个是什么原因 PHP 工商银行B2C支付接口怎么做

merID:银行提供.唯一确定一个商户的代码,由商户在工行开户时,由工行告知商户。

merAcct:银行提供 , 商城收费入账账号 (只能交易时指定)。

懂得html代码跟PHP的程序员一名

方法/步骤

到银行开户,说明要做B2C在线支付接口,此时银行会提供给你 merID 、merAcct 这两个

由程序员按照一下步骤来做即可,在商城提交表单的页面添加以下控件。

<html xmlns=;

<head>

<meta http-equiv=Content-Type content="text/html;charset=utf-8">

<title>百度一下,你就知道 </title>

</head>

<body>

<FORM name="order" METHOD=POST ACTION="">

<!--

订单只能使用POST方式提交;使用https协议通讯;

2、接收servlet名称固定为:/servlet/ICBCINBSEBusinessServlet

3、银行地址:如果是生产则为“mybank.icbc测试数据.cn”,若为模拟测试环境则为“mybank.dccnet测试数据.cn”

-->

<INPUT NAME="interfaceName" TYPE="text" value="ICBC_PERBANK_B2C" >

<!--接口名称固定为“ICBC_PERBANK_B2C”-->

<INPUT NAME="interfaceVersion" TYPE="text" value="1.0.0.0">

<!--接口版本目前为“1.0.0.0”-->

<INPUT NAME="orderid" TYPE="text" value="000000001">

<!--订单号商户端产生,一天内不能重复。-->

<INPUT NAME="amount" TYPE="text" value="100">

<!--金额以分为单位-->

<INPUT NAME="curType" TYPE="text" value="001">

<!--币种目前只支持人民币,代码为“001”-->

<INPUT NAME="merID" TYPE="text" value="XXXXXXXXXX" >

<!--银行提供(max20),唯一确定一个商户的代码,由商户在工行开户时,由工行告知商户。-->

<INPUT NAME="merAcct" TYPE="text" value="XXXXXXXXXX">

<!--银行提供(max19),商城收费入账账号 (只能交易时指定)。-->

<INPUT NAME="verifyJoinFlag" TYPE="text" value="0" >

<!--“1”判断该客户是否与商户联名;取值“0”不检验客户是否与商户联名。-->

<INPUT NAME="notifyType" TYPE="text" value="HS">

<!--HS方式实时发送通知;AG方式不发送通知;-->

<INPUT NAME="merURL" TYPE="text" value="">

<!--接收银行通知地址,目前只支持http协议80端口-->

<INPUT NAME="resultType" TYPE="text" value="0">

<!--对于HS方式“0”:发送成功或者失败信息;“1”,只发送交易成功信息。-->

<INPUT NAME="orderDate" TYPE="text" value="20050801192556">

<!--14位时间戳-->

<INPUT NAME="merSignMsg" TYPE="text" value="SFVdS3Kca6d/wetLFwynBl1q5nDIyxxEUXCzniIa47mhxs1BM9mPsnRc2lOqqrfwBdwBjSE82jS/iBHYKolf2sppjEyOImVZycv96321QPDgPA1yleO83K1XA1rmB3zxsIuwLKIICSWwdttn1XPYOQLJ/WAtZ5DFYFog7J8pXw0=">

<!--商户签名数据BASE64编码-->

<!--签名数据串,这里举例用的测试私钥user.key(顺序固定;被商户签名的串为各输入项的值):

接口名称的值+接口版本号的值+商城代码的值+商城账号的值+通知地址的值+结果发送类型的值+订单号的值+订单金额的值+支付币种的值+通知类型的值+交易日期时间的值+校验联名标志的值-->

<INPUT NAME="merCert" TYPE="text" value="MIICVjCCAb+gAwIBAgIKI9fKEDP6AAAO3DANBgkqhkiG9w0BAQUFADA0MRgwFgYDVQQDEw9wYmouaWNiYy5jb20uY24xGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjAeFw0yMDA5MjAwOTI3NDFaFw0yMTA5MjAwOTI3NDFaMEMxGDAWBgNVBAMTD2JpYW5sdTIyLmUuMDIwMDENMAsGA1UECxMEMDIwMDEYMBYGA1UEChMPcGJqLmljYmMuY29tLmNuMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG+u/C5pad0ZbwvAk9Gv1rr+SpknfFUsTMhJLcI2KiYa+XLSf5vCib0OclOoDDXKIWPt/hkMEz+ED8YukQpsstXHvnxVFxVtPstrong3dubQjB8/kJ7X5EbwngsHMLFEXqr3UvNfcGZHuAFqMRPtr8ys3YnL3UG43Xienc3cD8jXFdQQIDAQABo2AwXjBLBgNVHR8ERDBCMECgPqA8pDowODEOMAwGA1UEAxMFY3JsMTMxDDAKBgNVBAsTA2NybDEYMBYGA1UEChMPcGJqLmljYmMuY29tLmNuMA8GA1UdYwQIAwYA/wAAAAAwDQYJKoZIhvcNAQEFBQADgYEAQe6tLhKaNX8OPNT2XzH7dTXIFmTm37hSvmbEL/Q/pWV386KVrNSCnyN3fowanMt5TE9qZFn9enVvyDJw4nAUx38F2PFn2Tt7JUtzt/pNKC5FiebpFJH48AXIP1Xt5GjdcBx0oXM9QNBtYvY0189t357EH4UaBfO+c+L8fkOt37o=">

<!--商户证书公钥BASE64编码-->

<!--这里举例用的测试证书user.crt-->

<INPUT NAME="goodsID" TYPE="text" value="abcd001">

<!--商品编号,自商城获得-->

<INPUT NAME="goodsName" TYPE="text" value="小毡帽">

<!--商品名称,自商城获得-->

<INPUT NAME="goodsNum" TYPE="text" value="1" >

<!--商品数量,自商城获得-->

<INPUT NAME="carriageAmt" TYPE="text" value="100">

<!--已含运费金额,金额以分为单位,自商城获得-->

<INPUT NAME="merHint" TYPE="text" value="跳楼甩卖!" size="60">

<!--商城提示,以上五个字段用于客户支付页面显示-->

<INPUT NAME="remark1" TYPE="text" value=" ">

<!--备注字段 MAX(100)-->

<INPUT NAME="remark2" TYPE="text" value="">

<!--备注字段 MAX(100)-->

<INPUT TYPE="submit" value=" 提 交 订 单 " >

</form>

<body>

END

注意事项

注意商户提交订单数据不能提交接口中没有定义的字段

提交按钮不能设置name属性,如果设置了,提交按钮的值将作为一个变量提交,可能造成数据检查错误

经验内容仅供参考,如果您需解决具

php 支付宝接口官方给的md5签名版本和rsa签名版本的区别

虽然支付宝官方还未提供相关SDK,PHP确实可以实现RSA方式的签名,这点其实很重要,由于不熟悉,在遇到困难的时候,经常会不由自主地想到是否PHP不支持RSA签名,干脆用MD5得了,这样就没有了前进的动力。其实说穿了MD5和RSA签名,不同的只是签名方式的区别,其他的都一样,因此我这里主要说一下如何用RSA进行签名和验签。

首先你需要准备下面的东西:

php的openssl扩展里已经封装好了验签的方法openssl_verify。

如果在Windows下的php.ini需要开启Openssl模块: extension=php_openssl.dll

商户私钥:

即RSA私钥,按照手册,按以下方式生成:

openssl genrsa -out rsa_private_key.pem 1024

商户公钥:

即RSA私钥,按照手册,按以下方式生成:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

生成之后,按照手册的说明,需要在签约平台上传公钥,需要注意的是,上传的时候需要把所有的注释和换行都去掉。

另外手册中还有如下命令:

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

该命令将RSA私钥转换成PKCS8格式,对于PHP来说,不需要。

支付宝公钥:

根据手册,在签约平台获得。

如果你直接复制下来的话,会得到一个字符串,需要进行下面的转换;

1)把空格变成换行

2)添加注释

比如你复制下来的公钥是:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRBMjkaBznjXk06ddsL751KyYt

ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M

UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j

TCoccYMDXEIWYTs3CwIDAQAB,那转换之后为:

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRBMjkaBznjXk06ddsL751KyYt

ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M

UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j

TCoccYMDXEIWYTs3CwIDAQAB

-----END PUBLIC KEY-----

把公钥保存在文件里。

注意这个是2048位的公钥应该是9行或者10行,不能为1行,不然PHP的openssl_pkey_get_public无法读取,pub_key_id的结果为false,如果没有-----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 可以自己加上,最后保存到一个rsa_public_key.pem文件中。

好了,现在已经有了所有的东西,先看签名函数:

复制代码

1 <?php

2 /**

3 * 签名字符串

4 * @param $prestr 需要签名的字符串

5 * return 签名结果

6 */

7 function rsaSign($prestr) {

8 $public_key= file_get_contents('rsa_private_key.pem');

9 $pkeyid = openssl_get_privatekey($public_key);

10 openssl_sign($prestr, $sign, $pkeyid);

11 openssl_free_key($pkeyid);

12 $sign = base64_encode($sign);

13 return $sign;

14 }

15 ?>

复制代码

注意点:

1.$prestr的内容和MD5一样(参见手册,但不包含最后的MD5密码)

2.签名用商户私钥

3.最后的签名,需要用base64编码

4.这个函数返回的值,就是这次请求的RSA签名。

验签函数:

复制代码

1 <?php

2 /**

3 * 验证签名

4 * @param $prestr 需要签名的字符串

5 * @param $sign 签名结果

6 * return 签名结果

7 */

8 function rsaVerify($prestr, $sign) {

9 $sign = base64_decode($sign);

10 $public_key= file_get_contents('rsa_public_key.pem');

11 $pkeyid = openssl_get_publickey($public_key);

12 if ($pkeyid) {

13 $verify = openssl_verify($prestr, $sign, $pkeyid);

14 openssl_free_key($pkeyid);

15 }

16 if($verify == 1){

17 return true;

18 }else{

19 return false;

20 }

21 }

22 ?>

复制代码

注意点:

1.$prestr的内容和MD5一样(参见手册)

2.$sign是支付宝接口返回的sign参数用base64_decode解码之后的二进制

3.验签用支付宝公钥

4.这个函数返回一个布尔值,直接告诉你,验签是否通过

支付宝官方提供的PHP版SDK demo中只对MD5加密方式进行了处理,但android 端和ios端 请求支付宝加密方式只能用RSA加密算法,这时服务端PHP就无法验证签名了,所以需要对demo进行一些修改。

1、修改alipay_notify.class.php文件

verifyNotify 函数第46行

$isSign = $this->getSignVeryfy($_POST, $_POST["sign"]);

改成

$isSign = $this->getSignVeryfy($_POST, $_POST["sign"], $_POST["sign_type"]);

verifyReturn 函数第83行

$isSign = $this->getSignVeryfy($_GET, $_GET["sign"]);

改成

$isSign = $this->getSignVeryfy($_GET, $_GET["sign"], $_GET["sign_type"]);

getSignVeryfy 函数 116行

function getSignVeryfy($para_temp, $sign) {

改成

function getSignVeryfy($para_temp, $sign, $sign_type) {

getSignVeryfy 函数 127行

switch (strtoupper(trim($this->alipay_config['sign_type']))) {

case "MD5" :

$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);

break;

default :

$isSgin = false;

}

改成

switch (strtoupper(trim($sign_type))) {

case "MD5" :

$isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']);

break;

case "RSA" :

$isSgin = rsaVerify($prestr, $sign);

break;

default :

$isSgin = false;

}

2、新建一个alipay_rsa.function.php文件

复制代码

1 <?php

2 /* *

3 * RSA

4 * 详细:RSA加密

5 * 版本:3.3

6 * 日期:2014-02-20

7 * 说明:

8 * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

9 * 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。

10 */

11 /**

12 * 签名字符串

13 * @param $prestr 需要签名的字符串

14 * return 签名结果

15 */

16 function rsaSign($prestr) {

17 $public_key= file_get_contents('rsa_private_key.pem');

18 $pkeyid = openssl_get_privatekey($public_key);

19 openssl_sign($prestr, $sign, $pkeyid);

20 openssl_free_key($pkeyid);

21 $sign = base64_encode($sign);

22 return $sign;

23 }

24 /**

25 * 验证签名

26 * @param $prestr 需要签名的字符串

27 * @param $sign 签名结果

28 * return 签名结果

29 */

30 function rsaVerify($prestr, $sign) {

31 $sign = base64_decode($sign);

32 $public_key= file_get_contents('rsa_public_key.pem');

33 $pkeyid = openssl_get_publickey($public_key);

34 if ($pkeyid) {

35 $verify = openssl_verify($prestr, $sign, $pkeyid);

36 openssl_free_key($pkeyid);

37 }

38 if($verify == 1){

39 return true;

40 }else{

41 return false;

42 }

43 }

44 ?>

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="/data/upload/help/202303/02/b7c1294788a50fcca21a5abb5cdb2456.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做微信支付签名错误,请教一下这个是什么原因

出现这种情况可能是您的网络不好,或者是没有遵循开发规范,导致数字签名失败建议您更换更好的网络,同时根据开发规范调整后台代码。

关于php支付接口签名的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php支付接口签名 php支付接口开发的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did210317
更新时间:2023-05-03   阅读:31次

上一篇: php获取入参 php获取函数参数的方法

下一篇:img地址为php imagestring php

最新资料更新

  • 1.php导出cvs php导出csv大数据
  • 2.php下载文件完整官方版 php在哪下载
  • 3.zblogphp分类 zblog asp
  • 4.php视频教程知乎 php视频项目视频教程
  • 5.php用户资料转移 php迁移java
  • 6.析构函数php 析构函数不能指定返回类型
  • 7.php空间景安 php 免费空间
  • 8.怎php计算学生成绩 php输入成绩判断成绩等级
  • 9.包含catflag.php的词条
  • 10.php文件工具类 php文件处理
  • 11.php类属性分类 php数据类型
  • 12.腾讯php招聘 招聘 腾讯
  • 13.php网站界面代码 php网页
  • 14.关于php用户同时登录的信息
  • 15.关于php2esgbi的信息
  • 16.长沙php就业怎样 2021年php就业班
  • 17.phpflv播放器 php视频播放
  • 18.php常量乱码 phpstorm乱码
  • 19.php求数组个数 php求数组的和
  • 20.php调用裁剪插件 phpcrawl

CopyRight:2016-{hedonghua:year}{hedonghua:sitegs} 备案ICP:湘ICP备09009000号-16 {hedonghua:sitejym}
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]