git地址: http://packagist.p2hp.com/packages/yansongda/laravel-pay
具体使用说明请传送至 https://github.com/yansongda/pay
快速实现微信公众号支付功能 :https://www.jianshu.com/p/9c322b1a5274
运行环境
安装:
$ composer require yansongda/laravel-pay
配置文件:
$ php artisan vendor:publish --provider="Yansongda\LaravelPay\PayServiceProvider" --tag=laravel-pay
lumen用户请手动复制
随后,请在 config
文件夹中完善配置信息。
.env
文件里面配置
// alipay 配置
ALI_APP_ID=
ALI_PUBLIC_KEY=
ALI_PRIVATE_KEY=
// wechat 配置
WECHAT_APP_ID=
WECHAT_MINIAPP_ID=
WECHAT_APPID=
WECHAT_MCH_ID=
WECHAT_KEY=
使用方法:
微信配置文件: config/pay.php
return [
'wechat' => [
// 公众号 APPID
'app_id' => '',
// 小程序 APPID
'miniapp_id' => env('WECHAT_MINIAPP_ID', ''),
// APP 引用的 appid
'appid' => env('WECHAT_APPID', ''),
// 微信支付分配的微信商户号
'mch_id' => '',
// 微信支付异步通知地址
'notify_url' => '',
// 微信支付签名秘钥
'key' => '',
// 客户端证书路径,退款、红包等需要用到。请填写绝对路径,linux 请确保权限问题。pem 格式。
'cert_client' => public_path('cert/apiclient_cert.pem'),
// 客户端秘钥路径,退款、红包等需要用到。请填写绝对路径,linux 请确保权限问题。pem 格式。
'cert_key' => public_path('cert/apiclient_key.pem'),
// optional,默认 warning;日志路径为:sys_get_temp_dir().'/logs/yansongda.pay.log'
'log' => [
'file' => storage_path('logs/wechat.log'),
'level' => 'debug',
'type' => 'daily', // optional, 可选 daily.
'max_file' => 30,
],
],
];
后台文件
payController.php
/*
* 微信支付 唤起支付
* @return response
*/
public function wechatPay(Request $request)
{
$orderId = $request->input('order_id');
if (!$orderId) {
abort(404);
}
$userId = auth()->guard('home')->user()->id;
$openid = auth()->guard('home')->user()->openid;
$data = Order::where([
'user_id' => $userId,
'id' => $orderId,
'status' => 1,
'pay_status' => 1
])->first();
if ($data) {
$order = [
'out_trade_no' => $data['order_num'],
'body' => 'subject-测试',
'total_fee' => '1',
'openid' => $openid,
];
$config = config('pay.wechat');
$config['notify_url'] = config('app.url') . '/wechat/pay/notify';
$config['return_url'] = config('app.url') . '/wechat/pay/return';
$result = Pay::wechat($config)->mp($order);
$resData = [ //返回信息给前台 ,前台调起来微信支付
'timeStamp' => $result->timeStamp,
'nonceStr' => $result->nonceStr,
'packageStr' => $result->package,
'signType' => $result->signType,
'paySign' => $result->paySign,
];
$data = [
'code' => self::RESPONSE_CODE_SUCCESS,
'msg' => '获取成功',
'data' => $resData,
];
return response()->json($data);
}
return response()->json([
'code' => self::RESPONSE_CODE_ERROR,
'msg' => '获取失败'
]);
}
前台文件:
/*
* 微信支付异步通知
* @return string|\Symfony\Component\HttpFoundation\Response
*/
public function wechatNotify()
{
error_reporting(0);
$config = config('pay.wechat');
$pay = Pay::wechat($config);
$data = $pay->verify(); // 是的,验签就这么简单
\Log::info('wechat notify');
\Log::info($data);
if (!$data) {
return '';
}
$orderSn = $data->out_trade_no;
$transactionId = $data->transaction_id;
//$orderSn = "2019080852999750";
//$transactionId=time();
$this->changeOrderStatus($orderSn, $transactionId);
return $pay->success();
}
//=======================================================================
微信退款管理:
新建控制器
use Yansongda\Pay\Pay;
退款方法
public function returnOrder(){
$config = config('pay.wechat');
$result = Pay::wechat($config)->refund([
'out_trade_no' => $orderData->order_num, // 之前的订单流水号
'total_fee' => 1, //原订单金额,单位分
'refund_fee' => 1, // 要退款的订单金额,单位分
'out_refund_no' =>Utils::getOrderNum(), // 退款订单号
'notify_url' => config('app.url') . '/wechat/praise/notify' //
/*
* 微信退款地址
* @return string|\Symfony\Component\HttpFoundation\Response
*/
public function wechatRefundNotify()
{
error_reporting(0);
$config = config('pay.wechat');
$pay = Pay::wechat($config);
$data = $pay->verify(null, true); // 是的,验签就这么简单
\Log::info('refund notify');
\Log::info($data);
if (!$data) {
return '';
}
$orderData = Order::where('order_num', $data['out_trade_no'])->first();
if ($data['return_code'] === 'SUCCESS') {
if ($orderData) {
if (($orderData->pay_status == 2) && ($orderData->status == 4)) {
$orderData->update([
'pay_status' => 3,
'status' => 5,
'refund_status' => 2
]);
}
}
}
return $pay->success();
}
]);
}
larval 微信支付及退款到此结束