代码之家  ›  专栏  ›  技术社区  ›  danish dani

PHP:如何为SOAP https请求添加密钥库

  •  2
  • danish dani  · 技术社区  · 8 年前

    服务提供商只给了我们三个文件.jks、.p12和.wsdl文件。我在SOAPUI工具中测试了.wsdl文件,它正在工作。我在SOAPUI中上传了我的.jks文件 首选项>ssl设置

    然后我写了我的PHP代码

    <?php
    
    
    
    $wsdl = 'http://localhost/RbphpGateway/librb/RB_OLP_INITIATE_PAYMENT.wsdl';
    
    
    try{
        $clinet=new SoapClient($wsdl);
    
        $ver =array("olpIdAlias"=>"****","merchantId"=>"***","merchantRefNum"=>"418934223","paymentAmount"=>"100","paymentCurrency"=>"USD","dynamicMerchantLandingURL"=>"","dynamicMerchantFailureURL"=>"");
        $quates=$clinet->executeRB_OLP_INITIATE_PAYMENT($ver);
    
        echo  $quates->initiatePaymentDetailsRes->ibURL;
    
    
    }catch(SoapFault $e){
        echo $e->getMessage();
    }
    

    我的输出是

    无法连接到主机

    根据我对安全https连接的了解,我们需要用代码添加密钥库。
    谁能告诉我如何在PHP中添加证书。?我可以用php添加.jks文件吗。?

    2 回复  |  直到 8 年前
        1
  •  0
  •   Kurt Larsen    8 年前

    我怀疑这个问题与https有关,特别是当你描述它在SoupUI中工作时。


    您引用了localhost上的wsdl文件,我怀疑web服务位于不同的主机上?
    那么问题是与localhost还是与ws-host有关?

    开始确保您有权访问wsdl文件,并在创建 $clinet :

    $clinet=new SoapClient($wsdl,array('trace' => 1, 'exception' => 0));
    

    它允许您使用以下命令进一步检查soap结果 $client->__getLastRequest()

        2
  •  0
  •   Community CDub    8 年前

    我找到了解决方案。首先,我使用生成.pem文件 openssl

    $wsdl = dirname(__FILE__).'/librb/xxxxxx.wsdl';
    
    $endpoint       = 'https://pay.bnk.com/soap?service=payment';
    $local_cert = dirname(__FILE__)."/key1.pem";
    $passphrase = "*****";
    $options = array(
    
        'location'      => $endpoint,
        'keep_alive'    => true,
        'trace'         => true,
        'local_cert'    => $local_cert,
        'passphrase'    => $passphrase,
        'cache_wsdl'    => WSDL_CACHE_NONE,
    'trace'       => 1,     // traces let us look at the actual SOAP messages later
            'exceptions'  => 1 ,
    
    );
    
    try{
       $client = new SoapClient($wsdl,$options)
        } catch (SoapFault $E) { 
            echo $E->getMessage();
        }