_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; } } ?>