laravel使用EasyWeChat 使用

北极星
阅读 524 标签:php  

laravel 安装 laravel-wechat 实现微信授权登录

一。下载 laravel-wechat

https://packagist.org/packages/overtrue/laravel-wechat

二。使用 composer 安装 laravel-wechat

composer require "overtrue/laravel-wechat:~4.0"

三。配置

在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 + 无需手动注册)

'providers' => [
    // ...
    Overtrue\LaravelWeChat\ServiceProvider::class,
],
'aliases' => [
    // ...
    'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class,
],

创建配置文件:

php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider

1. 修改应用根目录下的 config/wechat.php 中对应的参数即可。

WECHAT_LOG_LEVEL=info  //日志级别 最好和laravel同级
WECHAT_LOG_FILE=/var/log/coupon/report.log  //日志保存文件 最好和laravel 统一
WECHAT_OFFICIAL_ACCOUNT_APPID=申请的appid
WECHAT_OFFICIAL_ACCOUNT_SECRET=申请的appsecret
WECHAT_OFFICIAL_ACCOUNT_TOKEN=
WECHAT_OFFICIAL_ACCOUNT_AES_KEY=

easyWeChat 微信公众号验证 token

<?php

namespace Modules\Easywechat\Http\Controllers;

use EasyWeChat\Factory;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class EasywechatController extends Controller
{
  public function serve(Request $request){
  $config = [
      'app_id' => env('WECHAT_OFFICIAL_ACCOUNT_APPID'),
      'secret' => env('WECHAT_OFFICIAL_ACCOUNT_SECRET'),
      'token' => env('WECHAT_OFFICIAL_ACCOUNT_TOKEN'),
      // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
      'response_type' => 'array',

      'log' => [
      'level' => 'debug',
      ],
  ];
  //从wechat.php 配置文件获取
  $config = config('wechat.official_account.default');
  $app = Factory::officialAccount($config);
  $response = $app->server->serve();
  $response->send(); // Laravel 里请使用:return $response;
  }
}

laravel 使用 EasyWeChat 统一下单

use EasyWeChat\Factory;
private $app;
public function __construct()
{

  $config = config('wechat.payment.default');
  $this->app = Factory::payment($config);
}
public function payment(PayRequest $request){
  $isContract = true;
  $result = $this->app->order->unify([
  'body' => '用户下单',
  'out_trade_no' => $order_no,
  'total_fee' => 10,
//           'spbill_create_ip' => '123.12.12.123', // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
  'notify_url' =>  config('wechat.payment.default.notify_url'), // 支付结果通知网址,如果不设置则会使用配置里的默认地址
  'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
  'openid' => Auth::user()->openid,
  ], $isContract);
  //注意
  1、如果支付时出现报错,timestame 参数问题。这是 easywechat 底层文件出错了。

  if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
      $config['timeStamp'] = $config['timestamp'];
     unset($config['timestamp']);
     return $this->success( $config);
}else{
      return $this->fail('支付失败');
}
2、如果签名失败
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){
      $prepayId = $result['prepay_id'];
      $jssdk =$this->app->jssdk;
      $config = $jssdk->sdkConfig($prepayId);
      $config['timeStamp'] = $config['timestamp'];
     unset($config['timestamp']);
     return $this->success( $config);
}else{
      return $this->fail('支付失败');
}

}

申请退款

退款方式 分为两种
第一种:根据微信订单号退款

// 参数分别为:微信订单号、商户退款单号、订单金额、退款金额、其他参数
$app->refund->byTransactionId(string $transactionId, string $refundNumber, int $totalFee, int $refundFee, array $config = []);

// Example:
$result = $app->refund->byTransactionId('transaction-id-xxx', 'refund-no-xxx', 10000, 10000, [
    // 可在此处传入其他参数,详细参数见微信支付文档
    'refund_desc' => '商品已售完',
]);
文章来源:网络 版权归原作者所有,如涉及知识产权问题,请权利人联系我们,我们将立即处理.
标签: php
北极星
文章 40 获得 0个赞 共 0个粉丝

推荐阅读 更多精彩内容