webview里的支付宝H5链接调起支付宝
这是不使用支付宝SDK的方案,老接口版本,支付宝调起客户端的问题:
.H5如何调起客户端支付宝,并且回调?
1.需要先我们用的是老接口还是新接口,对应的H5链接支持才可以。
若接入的是新版本手机网站支付接口(alipay.trade.wap.pay),用户在安装支付宝钱包的情况下,调用手机网站支付接口默认会唤起钱包支付;若接入的是手机网站支付老版本(alipay.wap.create.direct.pay.by.user ),那么需要在请求参数中加入app_pay参数并赋值为Y,详情参见 手机网站支付老版本文档;37用的是H5链接是老的,所以需要需要加入app_pay为Y的参数。
2.在上面支持之后,在我们的webview还是不能直接调起对应的app。我们需要拦截alipay://的请求,并且通过openURL的方式打开对应的app。需要注意白名单的问题。
3.最后就是要处理回调的问题,我的方案是在openurl里面处理的,拦截替换对应的参数。
.为什么支付宝的demo还是会报错?
我们首先需要搞清楚,我们的是旧接口,还是新接口。如果你的demo是新的,但是只签约了旧方法,只配置了旧的公私钥,那么当然就会有问题。
以上转载 https://www.jianshu.com/p/178638156466
‘app_pay’=>’Y’,//此行是调起支付宝app的

这个错误是gd库出了问题,一般是gd库在安装的时候没有编译freetype。我的解决方案是重新编译php,或者在编译PHP的时候不安装gd,后期安装动态链接库。我用的是lnmp一键安装包,环境是 deepin 15.7 。在安装php7.2的时候一直有报错。

1.首先是libcurl.so4报错。

解决方案是 sudo apt-get libcurl4 libcurl4-dev

2.是gd库报错,找了半天也没找到办法,索性编译时候去掉了gd库。

但是项目实在需要gd库,只能手动的编译,在编译的时候需要freetype。

刚开始我没有用freetype直接编译,就出现了致命错误: Call to undefined function think\captcha\imagettftext()

我在/usr/local 中发现freetype。但是好像不能工作,我就直接rm掉了

手动安装了freetype 当然还是这个目录了

接下来在php源码中 找到 ext/gd 重新安装

/path/phpize

./configure –with-php-config=/usr/local/php/bin/php-config –with-freetype-dir=/usr/local/freetype/

make

sudo make install

PHP配置加上 gd.so 重启php-fpm 解决问题

最近做了一个招商银行支付对接,要求使用SHA1WithRSA算法校验, “ 成功签约结果通知 ” 和 “ 成功支付结果通知 ” 接收到的通知报文进行验签。招商银行给出的文档如下

此文档写的有问题,导致PHP无法成功的校验签名真伪。问题如下

1.noticeData不能转为小写,转了必挂

2.在解密前必须给签名base64_decode一下

3.获取招商银行公钥必须手动加上标准证书头 begin end

 

找到这些问题,SHA1WithRSA就迎刃而解了,用到的PHP函数只有一个  openssl_verify 核心代码如下:

$pub_key_id = '-----BEGIN PUBLIC KEY-----'.PHP_EOL.$publicKey.PHP_EOL.'-----END PUBLIC KEY-----';
$bool = openssl_verify($data, base64_decode($signature) ,$pub_key_id,OPENSSL_ALGO_SHA1); //如果签名正确返回 1, 签名错误返回 0, 内部发生错误则返回false

我的环境是php5.6

在和第三方支付接口对接时经常会对数据进行签名和验签,sha1WithRSA也算是比较常用的一种签名加密算法。php开启openssl库后实现起来也算比较简单。
我在这里使用sha1withRSA算法来实现数据的加密签名和验签,其中公钥和私钥均读取自接口方提供的.pfx证书文件。

以下是使用私钥进行签名的代码示例,注意其中在return前对生成的签名密文进行base64编码:

/**
* 签名 生成签名串 基于sha1withRSA
* @param string $data 签名前的字符串
* @return string 签名串
* @link www.zh30.com
*/
function sign($data) {
$certs = array();
openssl_pkcs12_read(file_get_contents(“你的.pfx文件路径”), $certs, “password”); //其中password为你的证书密码
if(!$certs) return ;
$signature = ”;
openssl_sign($data, $signature, $certs[‘pkey’]);
return base64_encode($signature);
}
验签时使用公钥,也就是.pfx文件中的cert KEY:

/**
* 验签 验证签名 基于sha1withRSA
* @param $data 签名前的原字符串
* @param $signature 签名串
* @return bool
* @link www.zh30.com
*/
function verify($data, $signature) {
$certs = array();
openssl_pkcs12_read(file_get_contents(“你的.pfx文件路径”), $certs, “password”);
if(!$certs) return ;
$result = (bool) openssl_verify($data, $signature, $certs[‘cert’]); //openssl_verify验签成功返回1,失败0,错误返回-1
return $result;
}

转载: https://www.zh30.com/php-sha1withrsa-sign-verify-pfx.html

 

sha1withrsa