WxpayController.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace app\api\controller\pay;
  3. use app\model\Order;
  4. use app\model\PayDetail;
  5. use support\Request;
  6. use Yansongda\Pay\Exceptions\BusinessException;
  7. use Yansongda\Pay\Pay;
  8. class WxpayController
  9. {
  10. public function index(Request $request)
  11. {
  12. $params = $request->all();
  13. if (!isset($params['order_id'])) {
  14. return json_fail('参数异常');
  15. }
  16. $orderId = $params['order_id'];
  17. $payDetail = PayDetail::where('join_pay_order_id',$orderId)->where('pay_status','WAITING')->first();
  18. if (!$payDetail) {
  19. return json_fail('订单异常');
  20. }
  21. $payData = [
  22. 'out_trade_no' => $orderId,
  23. 'body' => '万悦康养订单',
  24. 'total_fee' => $payDetail->pay_amount * 100,
  25. ];
  26. try {
  27. $alipay = Pay::wechat($this->getConfig())->app($payData)->getContent();
  28. return json_success('', json_decode($alipay, true));
  29. } catch (BusinessException $e) {
  30. return json_fail($e->getMessage());
  31. } catch (\Exception $e) {
  32. return json_fail('下单失败');
  33. }
  34. }
  35. public function notify()
  36. {
  37. $pay = Pay::wechat($this->getConfig());
  38. try {
  39. $data = $pay->verify(); // 是的,验签就这么简单!
  40. Log::debug('Wechat notify', $data->all());
  41. } catch (\Exception $e) {
  42. // $e->getMessage();
  43. }
  44. return $pay->success()->send();// laravel 框架中请直接 `return $pay->success()`
  45. }
  46. private function getConfig()
  47. {
  48. return [
  49. 'appid' => 'wx089c26eaf96c3d51', // APP APPID
  50. 'mch_id' => '1680393367',
  51. 'key' => 'c451cedbab8058e3502a35c6dacf0919',
  52. 'notify_url' => 'https://api.wanyuewellness.com.cn/api.pay.notify.php',
  53. 'cert_client' => config_path('cert/wxpay/apiclient_cert.pem'), // optional,退款等情况时用到
  54. 'cert_key' => config_path('cert/wxpay/apiclient_key.pem'),// optional,退款等情况时用到
  55. 'log' => [ // optional
  56. 'file' => runtime_path('logs/wechat.log'),
  57. 'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
  58. 'type' => 'single', // optional, 可选 daily.
  59. 'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
  60. ],
  61. 'http' => [ // optional
  62. 'timeout' => 5.0,
  63. 'connect_timeout' => 5.0,
  64. // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
  65. ],
  66. // 'mode' => 'dev', // optional, dev/hk;当为 `hk` 时,为中国香港 gateway。
  67. ];
  68. }
  69. }