详解用vue.js和laravel实现微信支付

以下是详解用Vue.js和Laravel实现微信支付的完整攻略:

1. 前期准备

首先我们需要准备一些前期工作,包括:

  • 注册微信支付账号,获取appid、商户号、支付秘钥等信息,以及生成API密钥证书;
  • 安装Laravel框架,创建项目并安装必要扩展库;
  • 安装Vue.js框架,创建项目并安装必要依赖库。

2. 后端实现

  • 在Laravel项目中,配置微信支付的相关信息,包括公众号、商户号、支付密钥、证书等;
  • 创建微信支付控制器,编写预支付和支付回调接口函数;
  • 在预支付接口中,对订单信息进行校验,生成统一下单接口所需的参数并调用微信支付API,返回预支付结果;
  • 在支付回调接口中,对支付状态进行验证,处理订单信息并返回支付结果。

3. 前端实现

  • 在Vue.js项目中,创建微信支付组件;
  • 在组件中使用axios库请求后端预支付接口,获取预支付结果;
  • 将预支付结果传递给微信公众号支付API,生成支付二维码或跳转到微信支付页面;
  • 在微信支付成功后,回调后端接口,更新订单状态等相关信息。

示例说明

  1. 预支付实现示例
<?php

namespace App\Http\Controllers;

use App\Constants\PaymentMethod;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Yansongda\Pay\Pay;

class WechatPayController extends Controller
{
    public function prepay(Request $request)
    {
        // 验证订单信息
        $this->validate($request, [
            'order_no' => 'required|unique:orders',
            'amount' => 'required|numeric|min:0.01',
            'description' => 'required',
        ]);

        $user = auth()->user();
        $order = Order::create([
            'order_no' => $request->input('order_no'),
            'amount' => $request->input('amount'),
            'description' => $request->input('description'),
            'user_id' => $user->id,
        ]);

        // 调用支付API
        $orderData = [
            'out_trade_no' => $order->order_no,
            'total_fee' => bcmul(strval($order->amount), '100'), // 单位为分
            'body' => $order->description,
            'trade_type' => 'JSAPI', // 微信公众号支付
            'openid' => $user->openid,
        ];
        $pay = Pay::wechat(config('pay.wechat'))->{$orderData['trade_type']}($orderData);
        if ($pay->return_code !== 'SUCCESS' || $pay->result_code !== 'SUCCESS') {
            $order->delete();
            return response()->json(['message' => '支付失败'], 500);
        }

        return $pay->toArray();
    }
}
  1. 支付回调示例
<?php

namespace App\Http\Controllers;

use App\Models\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpFoundation\Response;
use Yansongda\Pay\Pay;

class WechatPayController extends Controller
{
    public function notify(Request $request)
    {
        $pay = Pay::wechat(config('pay.wechat'));

        try {
            $data = $pay->verify(); // 验证签名
            $order = Order::where('order_no', $data['out_trade_no'])->firstOrFail();
            if ($order->paid_at) { // 如果订单已经支付过了
                return $pay->success();
            }
            $order->update([
                'paid_at' => now(), // 支付时间
                'payment_method' => PaymentMethod::WECHAT, // 支付方式
                'payment_no' => $data['transaction_id'], // 微信支付订单号
            ]);
            // TODO: 处理支付成功后的业务逻辑
            Log::info('Wechat pay success', ['order_no' => $order->order_no]);
            return $pay->success();
        } catch (\Exception $e) {
            Log::error("WeChat Pay notify error: {$e->getMessage()}", ['request' => $request->all()]);
            return $pay->fail();
        }
    }
}

以上就是用Vue.js和Laravel实现微信支付的完整攻略,示例代码可以辅助理解。

阅读剩余 61%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解用vue.js和laravel实现微信支付 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php实现数组重复数字统计实例

    下面是详细讲解“php实现数组重复数字统计实例”的完整攻略。 问题背景 首先,我们需要了解一下问题的背景。在我们编写代码时,可能会遇到需要对数组进行统计的情况,特别是需要统计数组中出现重复数字的次数。在这种情况下,我们需要用到PHP的数组函数和循环结构,来实现数组重复数字的统计。 步骤一:定义数组 为了方便实现重复数字的统计,我们需要定义一个包含重复数字的数…

    PHP 2023年5月26日
    00
  • 在CentOS服务器上安装配置LEMP的详细教程

    下面给您详细讲解在CentOS服务器上安装配置LEMP的详细教程。 安装Nginx 更新yum软件包列表:sudo yum update 安装nginx:sudo yum install nginx 启动nginx服务:sudo systemctl start nginx 示例说明:例如您想要将一个简单的HTML网站部署到CentOS服务器上,可以将HTML…

    PHP 2023年5月24日
    00
  • php object转数组示例

    下面是“PHP Object 转数组示例”的完整攻略,包括了两条示例说明: 什么是 Object 转数组 在 PHP 中,Object 是一种特殊的数据类型,它包含了多个属性,每个属性都由一个键和一个值组成。Object 转数组是将 Object 中的属性值转换为数组格式的操作。 如何将 Object 转数组 在 PHP 中,可以使用 get_object_…

    PHP 2023年5月26日
    00
  • 分享一段php获取linux服务器状态的代码

    请看以下详细讲解: 1. 确定需求 首先确定需求,即获取Linux服务器的状态信息,包括CPU及内存使用情况等。 2. 编写PHP代码 接下来,我们来编写获取服务器状态的PHP代码。以下是获取CPU及内存使用信息的示例代码: <?php function get_server_status() { $cpu_usage = shell_exec(&qu…

    PHP 2023年5月23日
    00
  • PHP移动文件指针ftell()、fseek()、rewind()函数总结

    下面是对“PHP移动文件指针ftell()、fseek()、rewind()函数总结”的详细讲解。 1. ftell()函数的作用 ftell()函数用于获取当前文件指针的位置。它的用法非常简单,只需给函数传入文件指针即可,具体语法如下: int ftell(resource $handle); 其中,参数 $handle 表示文件指针,可以使用 fopen…

    PHP 2023年5月25日
    00
  • PHP调用其他文件中的类

    PHP调用其他文件中的类,需要使用对象实例化及命名空间的概念。以下是调用其他文件中的类的完整攻略: 导入类文件及命名空间 在使用其他文件中的类时,需要先导入类文件并指定命名空间。例如有一个名为Person.php的类文件,命名空间为App\Models,则需要在使用该类的文件中先导入该文件并指定命名空间: use App\Models\Person; 在导入…

    PHP 2023年5月26日
    00
  • php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

    关于php中判断方法或函数是否存在,PHP提供了以下三个函数: function_exists(): 用于判断函数是否存在 method_exists(): 用于判断方法是否存在 is_callable(): 用于判断函数或方法是否可调用 function_exists() function_exists()函数用于判断指定的函数是否被定义。该函数需要传入一…

    PHP 2023年5月26日
    00
  • 微信小程序开发(二)图片上传+服务端接收详解

    我来为您详细讲解“微信小程序开发(二)图片上传+服务端接收详解”的完整攻略。 文章概述 本文主要介绍微信小程序中图片上传的方法,以及服务端接收图片的实现方法。主要包括以下内容: 小程序中基于wx.chooseImage()实现图片上传 服务端使用Node.js and express框架来接收图片并保存 小程序中基于wx.chooseImage()实现图片上…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部