Laravel-pay 最优雅的微信支付
前后端分离微信支付
为了解决相关问题看了许多博客文章这里是记录解决问题和方法,文章有不对的地方给予建议哦
安装和配置就不一一介绍了请参照文档,话不多直接上代码你懂得。
参考链接
<?php
namespace App\Http\Controllers;
use SimpleSoftwareIO\QrCode\BaconQrCodeGenerator;
use Yansongda\Pay\Exceptions\GatewayException;
use Yansongda\Pay\Log;
use Yansongda\Pay\Pay;
class PayController extends Controller
{
protected $order = [
'out_trade_no' => time(), // 只能是数字、大小写字母_-|* 且在同一个商户号下唯一 要求32字符
'body' => '订单支付',
'total_fee' => '1', // 订单总金额,单位为分,详见支付金额
];
/**
* 扫码支付
*
* @return mixed
*/
public function weixinScanPay()
{
// 对支付异常捕获和支付日志记录
try {
$pay = Pay::wechat(config('pay.wechat'))->scan($order);
$res = (new BaconQrCodeGenerator)
->format('svg')
->size(200)->errorCorrection("L")
->generate($pay['code_url']);
return $res;
} catch (GatewayException $e) {
Log::info('二维码出错:' . $e->getMessage());
}
}
/**
* H5支付订单下单处理
* @return string
*/
public function H5Pay()
{
// TODO:订单处理
$order = $this->order;
try {
$wap = Pay::wechat(config('pay.wechat'))->wap($order);
// 回调地址支付完成页面 config('pay.wechat.pay_success')地址需要与前端约定
$mweb_url = $wap->getTargetUrl() . '&redirect_url=' . config('pay.wechat.pay_success');
$set_wap = Pay::wechat(config('pay.wechat'))->wap($order)->setTargetUrl($mweb_url);
return $set_wap->getContent();// html内容进行跳转
} catch (GatewayException $e) {
Log::info(date("H:i:s") . " 订单{order['out_trade_no']}");
if (strpos($e->getMessage(), 'OK该订单已支付') === false) {
// 不是已支付订单
// $e->getMessage();
} else {
// 订单已支付消息;
}
}
}
/**
* 获取 wx js api pay 信息
*
* @param Api $api
* @return mixed
*/
public function Pay()
{
// 业务处理
$order = $this->order
try {
return Pay::wechat(config('pay.wechat'))->mp($order);
} catch (GatewayException $e) {
Log::info(date("H:i:s") . " 订单{order['out_trade_no']}");
if (strpos($e->getMessage(), 'OK该订单已支付') === false) {
// 不是已支付订单
} else {
// 订单已支付
}
}
}
/**
* 支付回调
* @return \Symfony\Component\HttpFoundation\Response
*/
public function notify()
{
try {
Log::info('微信支付回调开始<================================支付中');
$pay = Pay::wechat(config('pay.wechat'));
$data = $pay->verify(); // 验签
Log::debug('支付回调参数', $data->all());
$outTradeNo = $data->out_trade_no;
Log::info('订单编号====' . $outTradeNo);
// 业务处理
} catch (GatewayException $e) {
Log::error('微信回调错误', [$e->getMessage()]);
}
Log::info('微信支付回调结束================================>支付已完成');、
}
}
}
laravel -pay 本地开发测试注意客户端IP地址获取
本作品采用《CC 协议》,转载必须注明作者和本文链接
Parse [mch_public_cert_path] Serial Number Error 我怎么一直报这个错啊