RefillCallBack.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace refill\xuyou_hf;
  3. require_once(BASE_HELPER_RAPI_PATH . '/xuyou_hf/config.php');
  4. use refill;
  5. class RefillCallBack implements refill\IRefillCallBack
  6. {
  7. private function req_params(array $input) : array
  8. {
  9. $params['mchid'] = $input['mchid'];
  10. $params['orderid'] = $input['orderid'];
  11. $params['oid'] = $input['oid'];
  12. $params['number'] = $input['number'];
  13. $params['status'] = $input['status'];
  14. return $params;
  15. }
  16. public function verify($params): bool
  17. {
  18. $input = $params;
  19. unset($input['sign']);
  20. $input = $this->req_params($input);
  21. $sign = $this->sign($input);
  22. if ($params['sign'] == $sign) {
  23. return true;
  24. } else {
  25. return false;
  26. }
  27. }
  28. protected function check_empty($value) : bool
  29. {
  30. if (!isset($value))
  31. return true;
  32. if ($value === null)
  33. return true;
  34. if (trim($value) === "")
  35. return true;
  36. return false;
  37. }
  38. private function sign($params) : string
  39. {
  40. $body = "";
  41. $i = 0;
  42. foreach ($params as $k => $v) {
  43. if (false === $this->check_empty($v) && "@" != substr($v, 0, 1)) {
  44. if ($i == 0) {
  45. $body .= "{$k}" . "=" . urlencode($v);
  46. } else {
  47. $body .= "&" . "{$k}" . "=" . urlencode($v);
  48. }
  49. $i++;
  50. }
  51. }
  52. $body .= "&key=".config::KEY;
  53. return md5($body);
  54. }
  55. public function notify($params) : array
  56. {
  57. $status = intval($params['status']);
  58. $order_sn = $params['orderid'];
  59. $order_info = Model('vr_order')->getOrderInfoForNotify(['order_sn' => $order_sn]);
  60. if (empty($order_info)) {
  61. return [false, false, false,false];
  62. }
  63. $order_id = $order_info['order_id'];
  64. if ($status === 2) {
  65. $data['ch_trade_no'] = $params['oid'];
  66. $data['official_sn'] = strtolower($params['voucher']) == 'null' ? '' : $params['voucher'];
  67. Model('refill_order')->edit($order_id, $data);
  68. return [$order_id, true, false,true];
  69. }
  70. elseif ($status === 3) {
  71. Model('refill_order')->edit($order_id, ['ch_trade_no' => $params['oid']]);
  72. return [$order_id, false, true,true];
  73. }
  74. else {
  75. return [$order_id, false, false,false];
  76. }
  77. }
  78. }