中国工商银行支付网关&x2013;PHP infosec.so动态共享库
ICBC支付网关–PHP infosec.so动态共享库 开始 我将写下我所有的过程,希望它能帮助一些不幸的灵魂解决他/她/他们的问题,因为我找不到什么!关于这一点工行支付整合 中国工商银行是世界第二大银行(截至本文撰写之时),因此我认为将b2c支付网关集成添加到他们的系统中是相当容易的中国工商银行支付网关&x2013;PHP infosec.so动态共享库,php,linux,shared-libraries,payment-gateway,php-extension,Php,Linux,Shared Libraries,Payment Gateway,Php Extension,ICBC支付网关–PHP infosec.so动态共享库 开始 我将写下我所有的过程,希望它能帮助一些不幸的灵魂解决他/她/他们的问题,因为我找不到什么!关于这一点工行支付整合 中国工商银行是世界第二大银行(截至本文撰写之时),因此我认为将b2c支付网关集成添加到他们的系统中是相当容易的 获取文档和资产 收到后(通过电子邮件)电子商务商户开发指南.zip(翻译为:e-commerce\u business\u development\u guide.zip)的问题是,它是不完整的,并且没有包含
获取文档和资产 收到后(通过电子邮件)电子商务商户开发指南.zip(翻译为:
e-commerce\u business\u development\u guide.zip
)的问题是,它是不完整的,并且没有包含供PHP加载的动态库(.so
)
“失败不是一种选择”——艾尔·雷纳特和比尔·布罗伊尔斯
在飞往上海会见工行电子商务银行(e-b2c)副总裁后,我在USB驱动器上获得了另一套文档(V1.0.0.6)
关于使用中文文件名提取.zip的说明
Ubuntu/Linux不喜欢这样!只需使用$unzip电子商务商户开发指南.zip呈现的文件夹中的中文名称有各种各样的混乱,并且是“不可路径的”文件夹名称:b2cççb2cççv2.0.0.1çphpapiçu RedHat AES V5ç64
在尝试确定编码和其他一些无意义的东西后,7z神奇地工作了:
$7z x电子商务商户开发指南.拉链
先尝试一切
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.4
BuildVersion: 15E65
Xcode
Version: 7.3
Obtained from: Mac App Store
Last Modified: 3/23/16, 2:41 PM
Kind: Intel
64-Bit (Intel): Yes
Developer Tools: Version: 7.3 (7D175)
$ php -v
PHP 5.6.19 (cli) (built: Mar 30 2016 22:34:49)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
在雇佣了一名技术翻译后,我们基本上发现它们与我以前收到的是同一套,但这次是。所以文件
我们在美国拥有EC2 AMI AWS服务器,在中国内地拥有Aliyun Ubuntu服务器:
Ubuntu-Alyune
$ cat /proc/version
Linux version 3.13.0-65-generic (buildd@lgw01-26) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015
$ php -v
PHP 5.6.18-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
$ php -v
PHP 5.6.19-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
$ cat /proc/version
Linux version 3.13.0-65-generic (buildd@lgw01-26) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015
$ sudo ldconfig -v
...
/usr/lib:
AMI-AWS
$ cat /proc/version
Linux version 3.14.48-33.39.amzn1.x86_64 (mockbuild@gobi-build-60007) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Tue Jul 14 23:43:07 UTC 2015
$ php -v
PHP 5.6.19 (cli) (built: Apr 1 2016 22:29:27)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
AmazonLinuxAMI基于RHEL5.x和RHEL6.1的部分内容
我们的目标是与RHEL 5.x的二进制兼容性,因此
精明的用户会注意到我们的内核是基于
2.6.34……”-
Ubuntu-Alyune
$ cat /proc/version
Linux version 3.13.0-65-generic (buildd@lgw01-26) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015
$ php -v
PHP 5.6.18-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
$ php -v
PHP 5.6.19-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
$ cat /proc/version
Linux version 3.13.0-65-generic (buildd@lgw01-26) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015
$ sudo ldconfig -v
...
/usr/lib:
Macbook Pro-开发环境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.4
BuildVersion: 15E65
Xcode
Version: 7.3
Obtained from: Mac App Store
Last Modified: 3/23/16, 2:41 PM
Kind: Intel
64-Bit (Intel): Yes
Developer Tools: Version: 7.3 (7D175)
$ php -v
PHP 5.6.19 (cli) (built: Mar 30 2016 22:34:49)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
在尝试加载所有.so
…
我写了一个很好的小脚本来测试它们:
#!/bin/bash
INI='/abs/path/to/php/conf.d/ext-icbc_infosec.ini'
find . -name '*.so*' | while IFS= read -r FILE; do
SO_NAME="$(cd "$(dirname "$FILE")" && pwd)/$(basename "$FILE")"
# nm -D $FILE > "$(cd "$(dirname "$FILE")" && pwd)/nm-D.$(basename "$FILE")"
echo "[-- $SO_NAME --]" >> $LOG
> $INI
echo "extension=\"$SO_NAME\""
echo "extension=\"$SO_NAME\"" >> $INI
echo "$(php -v | grep "Warning")"
echo $OUTPUT
echo ""
done
exit 0
并通过在LIB目录的根目录中运行脚本来捕获输出,如下所示:
$sudo./test\u api\u so.sh>&aliyun.ubuntu-script\u log.txt
请注意&
管道–必须捕获stderr输出
在AMI EC2 AWS服务器和我的本地Macbook上呈现输出:
警告:PHP启动:无效库(可能不是PHP库)
'/var/www/vhosts/scripts/LIB/Linux/v2.0.0.1_phpapi_RedHat AES
第0行未知的V5_64/product/libcrypto.so
解决方案
起初我猜测这可能与mcrypt(那个混蛋——它总是让我悲伤)有关,但是:
然后,我注意到只有Aliyune托管的Ubuntu上的日志输出不一致:
[-/var/www/vhosts/scripts/LIB/Linux/v2.0.0.1_phpapi_RedHat AES
V5_64/product/libinfosec_api.so-->PHP警告:PHP启动:无效
库(可能不是PHP库)
'/var/www/vhosts/scripts/LIB/Linux/v2.0.0.1_phpapi_RedHat AES
V5_64/product/libinfosec_api.so'位于第0行的未知位置
[-/var/www/vhosts/scripts/LIB/Linux/v2.0.0.1_phpapi_RedHat AES
V5_64/product/infosec.so-->PHP警告:PHP启动:无法加载
动态库
'/var/www/vhosts/scripts/LIB/Linux/v2.0.0.1_phpapi_RedHat AES
V5_64/product/infosec.so'-libinfosec_api.so:无法打开共享
目标文件:第0行未知中没有此类文件或目录
[-/var/www/vhosts/scripts/LIB/Linux/v2.0.0.1_phpapi_RedHat AES
V5_64/product/libcrypto.so.1.0.0--]PHP警告:PHP启动:
无效库(可能不是PHP库)
'/var/www/vhosts/scripts/LIB/Linux/v2.0.0.1_phpapi_RedHat AES
第0行未知中的V5_64/product/libcrypto.so.1.0.0
我想:这太奇怪了,所以我开始研究它。在产生以下输出方面有着巨大的帮助:
$ readelf -d infosec.so
Dynamic section at offset 0x3028 contains 22 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libinfosec_api.so]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000e (SONAME) Library soname: [infosec.so]
$ ldd infosec.so
linux-vdso.so.1 => (0x00007fffd5fc6000)
libinfosec_api.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f72ceb09000)
/lib64/ld-linux-x86-64.so.2 (0x00007f72ceece000)
$ ldd libinfosec_api.so
linux-vdso.so.1 => (0x00007ffed7f56000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f48ecf77000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f48ecbb2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f48ec9ae000)
/lib64/ld-linux-x86-64.so.2 (0x00007f48ed352000)
学分:
你看$ldd infosec.so。。。libinfosec_api.so=>未找到。我发现了什么
查看动态库的运行时包含情况
$ cat /proc/version
Linux version 3.13.0-65-generic (buildd@lgw01-26) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015
$ php -v
PHP 5.6.18-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
$ php -v
PHP 5.6.19-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
$ cat /proc/version
Linux version 3.13.0-65-generic (buildd@lgw01-26) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015
$ sudo ldconfig -v
...
/usr/lib:
学分:
发现问题
所以,问题不在于我没有正确地遵循指示,而在于工行将他们的动态链接了起来。所以,我错了!而且没有包含任何关于它的文档
因此,我将v2.0.0.1_phpapi_RedHat AES V5_64/product/libinfosec_api.So
复制到/usr/lib/
,将相应的infosec.So
移动到php模块目录(绝对不会出现权限或其他服务器欺诈问题),并重新添加了php扩展:
extension=“/usr/lib/php5/20131226/infosec.so”
啊哈强>-结论
这是一个永远存在的错误!因此,真正的问题不是这些文档是用外语编写的,或者世界上第二大银行的文档不完整(但实际上,您的模块依赖于另一个自定义模块……真的吗?以前是否工作过?),而是自定义模块是为不同的PHP版本编译的
适当的模因:
StackOverflow不是一个博客。这可能是一个有趣的信息。但是,它需要采用问答格式以适应堆栈溢出。