123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- <?php
- /**
- * PayApp_Demo 演示如何编写使用360支付的app支付接口
- */
- class PayApp_Demo implements PayApp_Interface
- {
- //需要修改为应用自身的app_key
- private $_appKey ;
- //需要修改为应用自身的app_secret(服务器之间通讯使用)
- private $_appSecret ;
- //人民币-游戏货币的兑换比例
- private $_cashRate = 10;
-
- public function __construct($appKey, $appSecret)
- {
- $this->_appKey = $appKey;
- $this->_appSecret = $appSecret;
-
- }
- public function getAppKey()
- {
- return $this->_appKey;
- }
- public function getAppSecret()
- {
- return $this->_appSecret;
- }
- public function isValidOrder(array $orderParams)
- {
- if (!empty($orderParams['app_order_id'])) {
- //使用应用自身的订单号
- $orderId = $orderParams['app_order_id'];
- } else {
- //使用360支付的订单号
- $orderId = $orderParams['order_id'];
- }
- $order = $this->_getOrder($orderId);
- if (empty($order)) {
- return false;
- }
- //订单是否已经处理过
- //需要根据应用自身的数据表结构修改
- $orderProcessed = $order['processed'];
- if ($orderProcessed) {
- return false;
- }
- return true;
- }
- private function _getOrder($orderId)
- {
- //应该根据360支付返回的订单号或者应用自身的订单号($order['app_order_id'])查询应用订单数据表
- return array(
- 'order_id' => $orderId,
- 'processed' => false,
- );
- }
- public function processOrder(array $orderParams)
- {
- $re = $this->_updateOrder($orderParams);
- if (!$re) {
- return;
- }
- $this->_addCash($orderParams);
- }
- private function _updateOrder(array $orderParams)
- {
- //更新订单,标识为已经处理,避免重复处理
- //如果更新订单状态失败,记录异常,以便再次处理。再次处理的逻辑需应用自己处理
- return true;
- }
-
- private function _getAmount(array $orderParams)
- {
- if (!empty($orderParams['is_sms'])) {
- //短信支付通知时,amount值不可靠,只能使用consumeCode
- $amount = 0;
- //TODO::根据$orderParams['pay_ext']['notify_data']['consumeCode'] 反推出正确金额。 注意amount的单位为分
- } else {
- $amount = $orderParams['amount'];
- }
- return $amount;
- }
- private function _addCash(array $orderParams)
- {
- //发货或者增加游戏中的货币
- //如果发货失败,记录异常,以便在再次处理。处理的逻辑需应用自己处理。
- //充值金额,以人民币分为单位。例如2000代表20元
- $amount = $this->_getAmount($orderParams);
- //兑换比例(人民币兑换游戏货币,$rate==10,表示1元人民币可兑换10游戏货币)
- $gameCashNum = $amount / 100 * $this->_cashRate;
- return true;
- }
- }
- ?>
|