RefillCallBack.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. {
  34. $card_info = $params['CardInfo'];
  35. if(!empty($card_info))
  36. {
  37. $result = $this->rsa_decode($params['CardInfo']);
  38. if (empty($result)) {
  39. $data['ret_state'] = 2;
  40. $data['card_info'] = '回调解密,解密失败';
  41. } else {
  42. $data['ret_state'] = 1;
  43. $data['card_info'] = $result;
  44. }
  45. Model('thrid_refill')->edit_third($order_id, $data);
  46. }
  47. return [$order_id, true, false,true];
  48. }
  49. elseif ($status === 3) {
  50. return [$order_id, false, true,true];
  51. }
  52. else {
  53. return [$order_id, false, false,false];
  54. }
  55. }
  56. private function rsa_decode($encrypted)
  57. {
  58. $ret = openssl_private_decrypt(base64_decode($encrypted), $decrypted, config::PRIVATE_KEY);
  59. if ($ret) {
  60. $result = json_decode($decrypted, true);
  61. return $result;
  62. } else {
  63. $err = openssl_error_string();
  64. Log::record("sctongqian callback openssl_private_decrypt error={$err}",Log::ERR);
  65. return false;
  66. }
  67. }
  68. }