PayCallbackService.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. require_once dirname(dirname(__FILE__)).'/service/SDKServerService.php';
  3. require_once dirname(dirname(__FILE__)).'/model/SDKException.php';
  4. require_once dirname(dirname(__FILE__)).'/util/ConfigHelper.php';
  5. require_once dirname(dirname(__FILE__)).'/util/LoggerHelper.php';
  6. try{
  7. // 接收HTTP POST信息
  8. //$request = file_get_contents("php://input");
  9. // 测试数据
  10. $request = '{"sign":"1ebc3d652404c8ac9b834a2aba9bb98a","data":{"failedDesc":"","amount":"30.0","callbackInfo":"serverip=sgall#channel=502#user=288287224.uc","accountId":"10000","creator":"JY","gameId":"1","payWay":"1","serverId":"1132","orderStatus":"S","orderId":"20120312113248863160","cpOrderId":"987654321"}}';
  11. LoggerHelper::info("[PayCallbackService.php]收到的支付回调的请求:".$request);
  12. // 处理支付回调请求
  13. $responseData = json_decode($request,true);
  14. if($responseData!=null){
  15. LoggerHelper::info("[PayCallbackService.php]"."[sign]:".$responseData['sign']);
  16. LoggerHelper::info("[PayCallbackService.php]"."[orderId]:".$responseData['data']['orderId']);
  17. LoggerHelper::info("[PayCallbackService.php]"."[gameId]:".$responseData['data']['gameId']);
  18. LoggerHelper::info("[PayCallbackService.php]"."[accountId]:".$responseData['data']['accountId']);
  19. LoggerHelper::info("[PayCallbackService.php]"."[creator]:".$responseData['data']['creator']);
  20. LoggerHelper::info("[PayCallbackService.php]"."[payWay]:".$responseData['data']['payWay']);
  21. LoggerHelper::info("[PayCallbackService.php]"."[amount]:".$responseData['data']['amount']);
  22. LoggerHelper::info("[PayCallbackService.php]"."[callbackInfo]:".$responseData['data']['callbackInfo']);
  23. LoggerHelper::info("[PayCallbackService.php]"."[orderStatus]:".$responseData['data']['orderStatus']);
  24. LoggerHelper::info("[PayCallbackService.php]"."[failedDesc]:".$responseData['data']['failedDesc']);
  25. LoggerHelper::info("[PayCallbackService.php]"."[cpOrderId]:".$responseData['data']['cpOrderId']);
  26. $baseService = new BaseSDKService();
  27. $signSource = $baseService->getSignData($responseData['data']).ConfigHelper::getStrVal("sdkserver.game.apikey");//组装签名原文
  28. $sign = md5($signSource);//MD5加密签名
  29. LoggerHelper::info("[PayCallbackService.php]"."[签名原文]:".$signSource);
  30. LoggerHelper::info("[PayCallbackService.php]"."[签名结果]:".$sign);
  31. if($sign == $responseData['sign']){
  32. //游戏需根据orderStatus参数的值判断是否给玩家过账虚拟货币。(S为充值成功、F为充值失败,避免假卡、无效卡充值成功)
  33. if ("S"==$responseData['data']['orderStatus']) {
  34. /**
  35. * 游戏服务器根据$responseData['data']['cpOrderId']订单ID查询出服务端保存的订单信息
  36. */
  37. //定额充值的游戏需要校验amount值避免玩家窜改了客户端下单时的金额,影响游戏收支平衡
  38. if ("30.0"==$responseData['data']['amount']||"88"==$responseData['data']['amount']) {
  39. //根据订单ID获取查询出原始下单信息中的accountId
  40. $orderAccountId = "abcdefghijkl";
  41. //游戏需根据accountId参数判断用户下单账号与充值账号一致后再下发虚拟货币
  42. if($orderAccountId == $responseData['data']['accountId']){
  43. /**
  44. * 游戏服务器需要处理给玩家充值代码,由游戏合作商开发完成。
  45. */
  46. LoggerHelper::info("[PayCallbackService.php]"."[处理结果]:"."SUCCESS");
  47. echo 'SUCCESS';//返回给sdk server的响应内容
  48. return;
  49. }
  50. }
  51. }
  52. }
  53. LoggerHelper::info("[PayCallbackService.php]"."[处理结果]:"."FAILURE");
  54. echo 'FAILURE';//返回给sdk server的响应内容 ,对于重复多次通知失败的订单,请参考文档中通知机制。
  55. return;
  56. }
  57. else{
  58. LoggerHelper::info("[PayCallbackService.php]"."接口返回异常");
  59. throw new exception('接口返回异常');
  60. }
  61. }
  62. catch (SDKException $e){
  63. LoggerHelper::info("[PayCallbackService.php]".$e->getMessage());
  64. throw new exception($e->getMessage());
  65. }