RefillCallBack.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace refill\sctongqian;
  3. require_once(BASE_HELPER_RAPI_PATH . '/sctongqian/config.php');
  4. use refill;
  5. use Log;
  6. class RefillCallBack implements refill\IRefillCallBack
  7. {
  8. public function verify($params): bool
  9. {
  10. $sign = $this->sign($params);
  11. if ($params['Sign'] == $sign) {
  12. return true;
  13. } else {
  14. return false;
  15. }
  16. }
  17. private function sign($params)
  18. {
  19. $content = config::APP_KEY . $params['TimesTamp'] . $params['MOrderID'] . $params['OrderID'] . $params['State'] . $params['ChargeAccount'];
  20. $content .= $params['BuyCount'] . config::App_Secret;
  21. return strtoupper(md5($content));
  22. }
  23. public function notify($params)
  24. {
  25. $status = intval($params['State']);
  26. $order_sn = $params['MOrderID'];
  27. $order_info = Model('vr_order')->getOrderInfo(['order_sn' => $order_sn]);
  28. // if (empty($order_info)) {
  29. // return [false, false, false,false];
  30. // }
  31. $order_id = $order_info['order_id'];
  32. if ($status === 2) {
  33. $result = $this->rsa_decode($params['CardInfo']);
  34. if (empty($result)) {
  35. $data['ret_state'] = 2;
  36. $data['card_info'] = '回调解密,解密失败';
  37. } else {
  38. $data['ret_state'] = 1;
  39. $data['card_info'] = $result;
  40. }
  41. Model('refill_order')->refill_third_edit($order_id, $data);
  42. return [$order_id, true, false,true];
  43. }
  44. elseif ($status === 3) {
  45. return [$order_id, false, true,true];
  46. }
  47. else {
  48. return [$order_id, false, false,false];
  49. }
  50. }
  51. private function rsa_decode($encrypted)
  52. {
  53. $ret = openssl_private_decrypt(base64_decode($encrypted), $decrypted, config::PRIVATE_KEY);
  54. if ($ret) {
  55. $result = json_decode($decrypted, true);
  56. return $result;
  57. } else {
  58. $err = openssl_error_string();
  59. Log::record("sctongqian callback openssl_private_decrypt error={$err}",Log::ERR);
  60. return false;
  61. }
  62. }
  63. }