Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
中国工商银行支付网关&x2013;PHP infosec.so动态共享库_Php_Linux_Shared Libraries_Payment Gateway_Php Extension - Fatal编程技术网

中国工商银行支付网关&x2013;PHP infosec.so动态共享库

中国工商银行支付网关&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)的问题是,它是不完整的,并且没有包含

ICBC支付网关–PHP infosec.so动态共享库

开始 我将写下我所有的过程,希望它能帮助一些不幸的灵魂解决他/她/他们的问题,因为我找不到什么!关于这一点工行支付整合

中国工商银行是世界第二大银行(截至本文撰写之时),因此我认为将b2c支付网关集成添加到他们的系统中是相当容易的


获取文档和资产

收到后(通过电子邮件)电子商务商户开发指南.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不是一个博客。这可能是一个有趣的信息。但是,它需要采用问答格式以适应堆栈溢出。