Demo.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. /**
  3. * PayApp_Demo 演示如何编写使用360支付的app支付接口
  4. */
  5. class PayApp_Demo implements PayApp_Interface
  6. {
  7. //需要修改为应用自身的app_key
  8. private $_appKey ;
  9. //需要修改为应用自身的app_secret(服务器之间通讯使用)
  10. private $_appSecret ;
  11. //人民币-游戏货币的兑换比例
  12. private $_cashRate = 10;
  13. public function __construct($appKey, $appSecret)
  14. {
  15. $this->_appKey = $appKey;
  16. $this->_appSecret = $appSecret;
  17. }
  18. public function getAppKey()
  19. {
  20. return $this->_appKey;
  21. }
  22. public function getAppSecret()
  23. {
  24. return $this->_appSecret;
  25. }
  26. public function isValidOrder(array $orderParams)
  27. {
  28. if (!empty($orderParams['app_order_id'])) {
  29. //使用应用自身的订单号
  30. $orderId = $orderParams['app_order_id'];
  31. } else {
  32. //使用360支付的订单号
  33. $orderId = $orderParams['order_id'];
  34. }
  35. $order = $this->_getOrder($orderId);
  36. if (empty($order)) {
  37. return false;
  38. }
  39. //订单是否已经处理过
  40. //需要根据应用自身的数据表结构修改
  41. $orderProcessed = $order['processed'];
  42. if ($orderProcessed) {
  43. return false;
  44. }
  45. return true;
  46. }
  47. private function _getOrder($orderId)
  48. {
  49. //应该根据360支付返回的订单号或者应用自身的订单号($order['app_order_id'])查询应用订单数据表
  50. return array(
  51. 'order_id' => $orderId,
  52. 'processed' => false,
  53. );
  54. }
  55. public function processOrder(array $orderParams)
  56. {
  57. $re = $this->_updateOrder($orderParams);
  58. if (!$re) {
  59. return;
  60. }
  61. $this->_addCash($orderParams);
  62. }
  63. private function _updateOrder(array $orderParams)
  64. {
  65. //更新订单,标识为已经处理,避免重复处理
  66. //如果更新订单状态失败,记录异常,以便再次处理。再次处理的逻辑需应用自己处理
  67. return true;
  68. }
  69. private function _getAmount(array $orderParams)
  70. {
  71. if (!empty($orderParams['is_sms'])) {
  72. //短信支付通知时,amount值不可靠,只能使用consumeCode
  73. $amount = 0;
  74. //TODO::根据$orderParams['pay_ext']['notify_data']['consumeCode'] 反推出正确金额。 注意amount的单位为分
  75. } else {
  76. $amount = $orderParams['amount'];
  77. }
  78. return $amount;
  79. }
  80. private function _addCash(array $orderParams)
  81. {
  82. //发货或者增加游戏中的货币
  83. //如果发货失败,记录异常,以便在再次处理。处理的逻辑需应用自己处理。
  84. //充值金额,以人民币分为单位。例如2000代表20元
  85. $amount = $this->_getAmount($orderParams);
  86. //兑换比例(人民币兑换游戏货币,$rate==10,表示1元人民币可兑换10游戏货币)
  87. $gameCashNum = $amount / 100 * $this->_cashRate;
  88. return true;
  89. }
  90. }
  91. ?>