RefillCallBack.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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)
  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)
  56. {
  57. $status = $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. }