Recommended PrestShop Version

Thanks for choosing Agile.
For customers using our Agile Multiple Seller module and its accessry modules, we highly recommend to use PrestaShop 1.6x or 1.7.5 or lower. PrestaShop has made some changes in versions higher than 1.7.6 that makes it possible or very difficult to implement some of features via hooks, or override, since required hooks or override is not available.

Sept. 05, 2019

支付模块集成指南

集合的付款方式和集成

我们介绍支付模块集成之前,我们需要了解什么是敏捷多个卖方模块在货款回收模式。当您使用敏捷多个卖方和其配套的模块作为您的在线市场解决方案时,您需要整合/自定义您的付款模块到敏捷多卖方环境。这取决于您正在使用你敏捷多个卖方的付款集合模式,要求支付模块是稍微有点不同。

存储收集付款

你不需要整合或自定义您的付款模块,你可以使用任何第三方支付模块为此支付集合模式。但支付模块必须遵循下面的步骤来处理付款并创建订单
= > 合股支付第一次 (整个购物车)
= > 然后通过调用 valiateOrder() 的 PaymentModule 类或其重写创建订单

卖方收取付款
 

你将需要你支付模块集成。

卖方和商店收集付款 

您需要将集成 /自定义支付模块。


第三方支付模块,以便能够与敏捷多个卖方模块集成的条件。

A.过程在店内付款
支付模块必须完成付款过程内 PrestaShop 没有将用户重定向到支付网关网站授权付款。这种支付模块通常使用支付网关的 API 或 web 服务发送买方付款到支付网关和付款结果在服务器端返回的信息,买方要不被重定向到付款公司网站授权付款。大多数信用卡支付模块使用这种方式。

B.处理付款之前先创建订单
支付模块必须处理付款先创建订单。这就是只有当付款已成功处理,然后调用 PaymentModule-> validateOrder() 来创建订单。ValidateOrder() 可能是支付模块重写方法。

集成第三方模块,与多个卖家-敏捷多个卖方 3.2.0.1 或以上的步骤
请把重点放在蓝色-集成的代码的代码行。

1.定义付款集合模式支持
以下行添加到付款模块类来定义你模块将支持哪些付款方式集合

AgilePaypalParallel 类扩展 PaymentModule
{
公共静态 $PaymentCollectionMode = 数组 (
1 = > 真实 ///seller 收集付款-买方付款将分为卖家帐户
2 = > 真实 ///both 商店和卖方收取款项-买方付款将被分成 store(commission) 和卖家的账户
3 = > 真实 ///store 收集买家付款
   );
   ................
}

2.支付模块可用性控制。
添加如下行代码在 hookDisplayPayment() 方法来控制模块有效性的开头

如果此支付模块不支持当前多个卖方支付集合模式,然后返回 false-不要露面
$paymode = (int)Configuration::get('AGILE_MS_PAYMENT_MODE');
if(Module::isInstalled('agilemultipleseller') & & ! 自我:: $PaymentCollectionMode [$paymode]) 返回 false;


3.注册一个钩子来告知多个卖方模块集成
您的模块内安装方法,添加一条线,注册钩 actionAgilePaymentModuleIntegrate 通知敏捷多个卖方组件集成此支付模块。


公共函数 uninstall()
{
if(!parent::uninstall()) 返回 false;
如果 (! 父:: install()
或者 ! $this-> registerHook('actionAgilePaymentModuleIntegrate')
或 !Configuration::updateValue ('AGILE_PAYPALPL_BUSINESS','[email protected]')
或 !Configuration::updateValue ('AGILE_PAYPALPL_SANDBOX',1)
或者 ! $this-> registerHook('displayPayment')
或者 ! $this-> registerHook('displayPaymentReturn')
) 返回 false;
    .............

}

4.准备钩方法以返回所需的集成信息
创建以下方法在您付款模块核心类,所以它将由多个卖方模块检索集成调用相关的信息。

公共函数 hookActionAgilePaymentModuleIntegrate($params)
{
返回数组 (
name = > $this-> 名称,
'递减' = > $this-> 显示名称,
模式 = > 自我:: $PaymentCollectionMode,
'被' = > 阵列 (
数组 (
'标签' = > $this-> l (' 授权条纹连接 ')
url = > 'https://connect.stripe.com/oauth/authorize'
工具提示 = > $this-> l (' 单击此处授权或重新授权您的条纹帐户连接与这个市场平台)
             ),
      ),

'info1' = > 数组 ('标签' = > $this-> l ('API 登录 ID') 'is_unique' = > 1,'is_readonly' = > 0,工具提示 = > $this-> l (' 场俘获的解释')),
info2 = > 数组 ('标签' = > $this-l (' 交易关键 '),'is_unique' > = > 1, 'is_readonly' = > 1,工具提示 = > $this-> l (' 场俘获的解释')),
'info3' = > 数组 ('标签' = > '无','is_unique' = > 0,'is_readonly' = > 0,工具提示 = >),

'info4' = > 数组 ('标签' = > '无','is_unique' = > 0,'is_readonly' = > 0,工具提示 = >),
'info5' = > 数组 ('标签' = > '无','is_unique' = > 0,'is_readonly' = > 0,工具提示 = >),
'info6' = > 数组 ('标签' = > '无','is_unique' = > 0,'is_readonly' = > 0,工具提示 = >),
'info7' = > 数组 ('标签' = > '无','is_unique' = > 0,'is_readonly' = > 0,工具提示 = >),
'info8' = > 数组 ('标签' = > '无','is_unique' = > 0,'is_readonly' = > 0,工具提示 = >),
    );
}

seller payment setting screen - integrated module

在上述钩方法,你将提供以下信息到敏捷开发多个卖方模块。
-名称的模块 (内部名称)
-模块 (该模块的显示名称) 的描述
-可用付款方式收集您的模块将支持
-付款信息,卖家具有提供从买家通过此模块收集付款。这通常配置字段的您的模块。有最大化 8 字段可供使用。所需的字段的数目取决于您的付款模块。

大多数情况下,回报主要存储区是不同的卖家,但有时他们是相同的信息字段。例如,敏捷 Authorize.NET 模块将具有以下 2 字段,如上面的示例代码中定义。
-API 日志 ID
-交易的关键

您必须定义该字段的标签,而且还指定是否该字段是独特的领域要验证时添加新的付款信息卖方的一部分。该模块将使用带有 is_unique 值 1 字段检查是否是其他的卖家,避免重复相同的付款信息。

注意
请保持代码的方式,只有更改的值,所以,该标签将能够支持多种语言,你将能够将字段名称翻译成不同语言在后台-本地化-交易记录选项卡

5.准备付款信息字段验证器 (可选)
每个卖家将需要输入付款信息为收到付款,从买家 (或商店)。您可能需要验证每个字段,卖家进入有效的数据。例如,如果它是贝宝模块,你会想要验证的第一个字段"info1"进入,卖家是一个有效的电子邮件地址。

下面是一个示例在您支付模块验证程序

公共函数 validatePaymentInfoFields($paymentinfo)
{
$errors = array ();
   
[] if(empty($paymentinfo)) $errors = $this-> l (无效付款信息);

$info1 = (is_array($paymentinfo)? $paymentinfo ['info1']: $paymentinfo-> info1);
如果 (!。[] Validate::isEmail($info1)) $errors = $this-> 名称。":" .$this-> l (' Paypl 电子邮件地址')。$this-> l (' 是无效的。');

返回 $errors;
}


6.处理付款和 validateOrder()-创建订单
为了使您的付款模块,您支付模块必须遵循 PrestaShop 结帐和订单处理流程与付款相关的标准步骤。这里是与订单付款相关的过程。

= = > A.检索付款信息 = = > B.执行付款 = = > C.ValidateOrder(Create Order data)

检索付款数据

你将需要调用以下方法 Agiile 打头卖方模块接收到付款数据。

$payments = AgileMultipleSeller::get_payment_info_from_cart();

该模块将与付款数据信息基于货款回收模式返回一个数组。每个元素的数组将包含以下信息。

-$id_seller 作为键的数组
-电子邮件": (卖方) 收件人的电子邮件地址 (卖方或存储),例如,[email protected]
-金额︰ 受援国的数量应得到 $230.00
-'委员会': 卖方支付或存储接收的委员会

注意
︰ 在购物车的货币量,您将需要转换为您支付模块指定货币之前发送到付款 getway。

下面是示例代码以显示为您支付模块的付款数据。

$payments = AgileMultipleSeller::get_payment_info_from_cart();
foreach ($payments $id_seller = > $payment)
{
......付款处理代码
}

$this-> validateOrder(...)
 

处理付款的代码将为不同支付模块不同。我们将留给您来决定如何执行付款。我们也将离开付款错误处理你来处理。例如,如果一个购物车中有多个卖方,你将需要处理如果一些卖方支付失败。一些信用购物车付款支持 2 步骤-授权支付的第一然后捕获要完成一个支付的金额,我们建议您第一次授权所有卖方付款然后 validateOrder(),又称"捕获"完成付款。

注意:

根据支付网关,您可能需要向卖方的付款信息,如 API 凭据而不是你的商店如果付款收件人是卖方。您可以使用下列代码得到卖方付款您支付模块的信息,(例如 API 凭据)。

include_once (_PS_ROOT_DIR_。"/ modules/agilemultipleseller/AgileSellerPaymentInfo.php");
$paymentinfo = AgileSellerPaymentInfo::getForSellerByModuleName ($这-> 名称、 $id_seller);




有集成的乐趣。