WxpayController.php 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace app\api\controller\pay;
  3. use app\model\Order;
  4. use app\model\PayDetail;
  5. use Payment\Common\PayException;
  6. use support\Db;
  7. use support\Request;
  8. use Yansongda\Pay\Exceptions\BusinessException;
  9. use Yansongda\Pay\Pay;
  10. class WxpayController
  11. {
  12. public function index(Request $request)
  13. {
  14. $params = $request->all();
  15. if (!isset($params['order_id'])) {
  16. return json_fail('参数异常');
  17. }
  18. if (!isset($params['platform'])){
  19. return json_fail('缺少平台参数');
  20. }
  21. $orderId = $params['order_id'];
  22. $payDetail = PayDetail::where('join_pay_order_id',$orderId)->where('pay_status','WAITING')->first();
  23. if (!$payDetail) {
  24. return json_fail('订单异常');
  25. }
  26. $payData = [
  27. 'out_trade_no' => $orderId,
  28. 'body' => '万悦康养订单',
  29. 'total_fee' => $payDetail->pay_amount * 100,
  30. ];
  31. Db::beginTransaction();
  32. try {
  33. $payDetail->pay_prepayid = 'ALIPAY';
  34. $payDetail->save();
  35. if ($params['platform'] == 'android'){
  36. $wxpay = Pay::wechat(config('payment.wxpay'))->app($payData)->getContent();
  37. }elseif ($params['platform'] == 'WeChat'){
  38. if (empty($params['openid'])){
  39. Db::rollBack();
  40. return json_fail("缺少OpenID 参数");
  41. }
  42. $payData['openid'] = $params['openid'];
  43. $wxpay = Pay::wechat(config('payment.wxpay'))->mp($payData)->getContent();
  44. }elseif ($params['platform'] == 'mp-weixin'){
  45. if (empty($params['openid'])){
  46. Db::rollBack();
  47. return json_fail("缺少OpenID 参数");
  48. }
  49. $payData['openid'] = $params['openid'];
  50. $wxpay = Pay::wechat(config('payment.wxpay'))->miniapp($payData)->getContent();
  51. }else{
  52. throw new PayException("平台参数无效");
  53. }
  54. Db::commit();
  55. return json_success('', json_decode($wxpay, true));
  56. } catch (\support\exception\BusinessException $e) {
  57. Db::rollBack();
  58. return json_fail($e->getMessage());
  59. } catch (\Exception $e) {
  60. Db::rollBack();
  61. dump($e->getMessage());
  62. return json_fail('下单失败');
  63. }
  64. }
  65. private function getConfig()
  66. {
  67. return [
  68. 'appid' => 'wx089c26eaf96c3d51', // APP APPID
  69. 'mch_id' => '1680393367',
  70. 'key' => 'c451cedbab8058e3502a35c6dacf0919',
  71. 'notify_url' => 'https://api.wanyuewellness.com.cn/api.pay.notify.php',
  72. 'cert_client' => config_path('cert/wxpay/apiclient_cert.pem'), // optional,退款等情况时用到
  73. 'cert_key' => config_path('cert/wxpay/apiclient_key.pem'),// optional,退款等情况时用到
  74. 'log' => [ // optional
  75. 'file' => runtime_path('logs/wechat.log'),
  76. 'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
  77. 'type' => 'single', // optional, 可选 daily.
  78. 'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
  79. ],
  80. 'http' => [ // optional
  81. 'timeout' => 5.0,
  82. 'connect_timeout' => 5.0,
  83. // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
  84. ],
  85. // 'mode' => 'dev', // optional, dev/hk;当为 `hk` 时,为中国香港 gateway。
  86. ];
  87. }
  88. }