2012-10-04 44 views
0

我已经构建了一个Web应用程序,并且正在寻找将cardsave的直接支付API集成到应用程序中。我想知道是否有人有任何建议,最好的方式来做到这一点。将卡支付与Codeigniter集成

Cardsave整合提供标准代码:Download Gateway Integration Pack ZIP file

当进行付款时,我需要在CrossPaymentsReference和支付金额存储在我的数据库,其余的我将离开cardsave的API我已经想了几个解决方案的这应该有可能的工作:

1)使用视图的所有代码和成功的支付,并使用Ajax更新数据库与交叉付款参考和支付金额sucessfull完成,因为它涉及代码的最小编辑,但由于它在客户端发送引用,所以具有较小的安全风险。

2)创建一个包含支付系统类的库,将预处理支付和处理支付代码放入控制器并将表单复制到一个视图中,只需要一个小模型来更新成功支付的数据库。 (我猜这是最好的方式。)

3)编辑的一切,打造我的最新项目上CI 2.0运行的代码

+0

......我不知道是什么问题,你问?也许你需要与Cardave联系,如果你有与他们有具体的整合问题? – Laurence

+0

我问更多,如果有人有什么建议最佳做法过程将集成付款到代码系统 – user1606612

+0

我是相当新的使用框架的我用硬编码在PHP的一切,所以我基本上希望有人会指出我在解决这个问题的最好方法的方向 – user1606612

回答

3

的MVC版本。我已经整合了一个支付系统,比如Card Save成功(在我的案例中,我使用了Ogone,这是一家比利时公司)。

下面我详细介绍了我是如何实施订单和支付系统的。

我可以给你的建议如下。

  • 将您的产品,订单和付款保存在单独的表格中。通过参考表 Link产品订单(不存储例如,在订购产品的ID在一个字段列表)
  • 允许一个付款只能有一个订单,但一个订单可以有多个付款(但只一个支付)。通过这种方式,当付款失败时(例如,用户按下卡上的取消保存付款页面),您可以在您的一边创建新的付款,并让用户重试(除非卡保存接受您使用相同的付款ID )。
  • 建立一个单独的库(不是控制器)来处理成功支付的订单。这个库将例如激活用户购买的订阅,或者为某人发布工作订单以发送产品。通过保持在一个单独的图书馆,你可以扩展它的功能(例如,如果某个产品,你会需要做一些新的东西),而在付款逻辑触碰(从而防止重复检)。
  • 发布数据时,或将用户重定向到收银台页面,即准备付款页面,每一次,以防止有人与数据篡改您发布或者说是在URL重新计算哈希散列生成。
  • 确保没有AJAX的情况下一切正常,然后添加AJAX。

基本上我想出了被划分为订购流程如下:

  1. 用户增加服务(我不卖实物产品)篮(使用CI的购物修改版车)
  2. 完成后用户点击“订购产品”,这确实一个POST到控制器Place_order。控制器Place_order做以下的事情:
    • 检查,如果用户在仍处于登录(对我来说每个人都需要先登记)
    • 获得了在购物车中的产品并检查他们是否实际存在于数据库(你永远不知道)
    • 在数据库中创建一个新的订单和产品在DB加入订单
  3. Place_order不输出任何东西,但成功的控制器结帐用户重定向。这里我不使用POST。通过这种方式,您可以重复使用该网址(例如,如果用户决定停止,他可以稍后继续付款)。该URL包含订单ID和散列。
  4. 结账控制器执行以下操作
    • 重新计算哈希值,看看没人用
    • 检查的顺序存在,如果订单属于用户尚未
    • 支票支付的URL篡改登录
    • 创建付款如果它不存在
    • 用按钮“取消订单”和“付款订单”显示一个视图。这实际上是一种在隐藏字段中包含付款ID和付款ID散列的表单。
  5. 当点击“支付令”,后做是为了控制器Pay_order。我不使用GET,因为我希望用户只通过张贴,是由结帐控制器设置的数据来此页面上。如果他们使用GET进入页面,则会引发错误。该控制器具有以下功能:
    • 重新计算哈希看到没有一个与发布数据篡改的
    • 检查支付存在且尚未支付
    • 如果一切OK,谱写包含的观点必要的信息被张贴到支付服务
    • 显示视图。
    • 当用户按下“进入支付服务”的所有数据被张贴到Ogone当用户执行支付
  6. 当支付完毕(正确与否)Ogone将用户重定向回给我一个控制器Payment_successfull或Payment_other(用于错误等)。在Payment_succesfull中,我调用一个库Purchase_activator,它将付款ID作为输入。这个人查找订单并激活用户刚付款的服务。在其他情况下(在误差)向用户示出与正确的错误消息,并且重试或取消的选项的图。
+1

这是很好的建议,非常感谢您的帮助 – user1606612