0%

whmcs系统添加网银支付接口

whmcs系统添加网银支付接口

其实利用whmcs系统的文档,按照规范编写网银支付接口是很简单的,但是问题在于,我要如何去使用现成的代码来完成这个接口呢。这里我们使用payment项目(笔者针对支付功能进行封装的一个library)来在whmcs系统上实现这个支付接口。

具体代码已经部署在github上,具体链接为whmcs-union

那么我们直接把重点放在whmcs系统中对外部项目的引用。

不能直接使用composer

笔者的whmcs系统版本为7.x,下载的源文件中并没有composer.json,所以在whmcs根目录下,冒然执行composer init然后require项目,将会覆盖掉vendor目录下原有的composer文件,导致whmcs系统无法正常定位到其本身依赖的库文件。

解决办法

在根目录下新建一个目录,名为vendor2,再在vendor2中执行composer init ,再require你需要引入的项目即可,但是要注意一点,不能直接requireone ‘./vendor2/vendor/autoload.php’文件,因为系统将会直接报错,换句话说,可以使用composer下载依赖,但是定位依赖的spl_autoload_register需要自己写。

spl_autoload_register示范

仅供参考,毕竟每一个不通的依赖,spl_autoload_register都是有可能不一样的,所以我们在具体调用的位置再去编写。

/**
 * Created by PhpStorm. * User: liumapp * Email: liumapp.com@gmail.com
  * homePage: http://www.liumapp.com
  * Date: 4/25/17
 * Time: 10:49 AM */
function union_config() {
  $configarray = array(
  "FriendlyName" => array("Type" => "System", "Value"=>"银联网关支付"),
  "unionCertDir" => array("FriendlyName" => "银联证书存储目录", "Type" => "text", "Size" => "50" ),
  "unionEncryptCertPath" => array("FriendlyName" => "银联公钥", "Type" => "text", "Size" => "50" ),
  "unionMerId" => array("FriendlyName" => "银联商户号", "Type" => "text", "size" => "50"),
  "unionSignCertPath" => array("FriendlyName" => "银联商户私钥", "Type" => "text", "Size" => "50" ),
  "unionSignCertPwd" => array("FriendlyName" => "银联商户私钥密码", "Type" => "text", "Size" => "50" ),
  );
  return $configarray;
}

function classLoadPayment ($class)
{
  $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
  $path = str_replace('liumapp' . DIRECTORY_SEPARATOR, '', $path);
  $path = str_replace('payment' . DIRECTORY_SEPARATOR , '' , $path);
  $file = '/alidata/www/default/whmcs/vendor2/vendor/liumapp/payment/src/' . $path . '.php';
  if (file_exists($file)) {
  require_once $file;
  }
}

function union_link($params) {

 spl_autoload_register('classLoadPayment');
  $systemurl = $params['systemurl'];
  $data = [
  'config' => [
  'merId' => $params['unionMerId'],
  'sdk_sign_cert_path' => $params['unionSignCertPath'],
  'sdk_sign_cert_pwd' => $params['unionSignCertPwd'],
  'sdk_encrypt_cert_path' => $params['unionEncryptCertPath'],
  'sdk_verify_cert_dir' => $params['unionCertDir'],
  'frontUrl' => $systemurl."/modules/gateways/callback/union_return.php",
  'backUrl' => $systemurl."/modules/gateways/callback/union_callback.php",
  ],
  'data' => [
  'orderId' => time(),
  'txnTime' => date('YmdHmi' , time()),
  'txnAmt' => 1,
  ],
  ];
  return \liumapp\payment\client\Charge::run('uni_con' , $data['config'] , $data['data']);
}