Laravel+esaywechat实现微信支付

Laravel+esaywechat实现公众号微信支付

## 首先安装easywechat包
laravel项目直接在终端跑以下命令:

composer require overtrue/wechat:~4.0

然后创建配置文件:

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

创建配置文件完成后会在你项目的config文件夹下生成一个wechat.php的文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述编辑wechat.php,这截图的是默认屏蔽的,看你个人需要释放相关代码。并填上相关参数,app_id,mch_id等等。可在.env里面配置,如果觉得麻烦可直接写在default里面。至此所有准备工作完毕。

代码块

1,laravel路由

Route::middleware('wechat.oauth', 'wechat')->group(function () {
   
	Route::get('/pay', 'CourseController@pay');//支付路由
});
 Route::post('/order/notify', 'OrderController@notify');//回调路由

注意
1.1,回调路由必须在middleware中间件路由外面,否则微信请求不到。
1.2,回调路由必须是post请求。
1.3,laravel框架必须取消回调路由的csrf防护。在你项目的app/Http/Middleware/VerifyCsrfToken.php中加入如下代码:

protected $except = [
        'order/notify',//回调路由取消csrf防护
    ];

2,支付流程
2.1,点击支付按钮,ajax提交相应参数到后台支付方法。
2.2,后台接收数据,往你的订单表里插入一条订单数据,状态为0,也就是未支付状态。
2.3,带上这条订单的订单号,价格,请求微信换取prepay_id。
2.4,请求微信成功会返回支付所需要的参数,appid,timestamp等。返回前端js 调起支付。
2.5,支付后微信会将支付结果通过回调返回,可根据返回信息更改订单状态,或者进行其他操作。

3,项目代码
3.1,前端js代码

var a;
$('.pay').click(function () {
   
    var course_id=$(this).val();//购买商品的id
    var price=$('.price').text();//购买商品的价格
    $.ajax({
   
        type:"GET",
        url:"/wechat/course/pay",
        data:{
   course_id:
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uni-app是一个跨平台的开发框架,可以用于开发iOS、Android、H5、小程序等多个平台的应用程序。而Egg.js是一款基于Node.js和Koa.js的Web开发框架,可以帮助开发者快速构建具有高度可扩展性、可维护性和稳定性的Web应用程序。 要实现uni-app + Egg.js的微信支付功能,可以按照以下步骤进行: 1.在uni-app中编写前端页面,引入微信支付的SDK,并使用uni.request将支付信息发送给后端。 2.在Egg.js中使用egg-wechat-pay插件,配置商户号、密钥等支付参数,并编写支付接口。 3.在支付接口中,使用egg-wechat-pay插件提供的api进行微信支付。 以下是实现uni-app + Egg.js的微信支付的参考代码: 1.前端页面代码: ```vue <template> <view class="container"> <button @click="onPay">微信支付</button> </view> </template> <script> import uniRequest from '@/utils/request' export default { methods: { onPay() { uniRequest.post('/api/pay', { body: 'uni-app 微信支付', total_fee: 1 }).then(res => { // 发起微信支付 uni.requestPayment({ 'timeStamp': res.timeStamp, 'nonceStr': res.nonceStr, 'package': res.package, 'signType': res.signType, 'paySign': res.paySign, success: function (res) { console.log('支付成功', res) }, fail: function (res) { console.log('支付失败', res) } }) }) } } } </script> ``` 2.Egg.js支付接口代码: ```javascript const Controller = require('egg').Controller class PayController extends Controller { async index() { const { ctx } = this const data = { body: ctx.request.body.body, out_trade_no: Date.now().toString(), total_fee: ctx.request.body.total_fee, spbill_create_ip: '127.0.0.1', notify_url: 'http://localhost:7001/api/pay/notify', trade_type: 'JSAPI', openid: 'xxxxxx' // 用户openid } const result = await ctx.service.pay.unifiedOrder(data) ctx.body = result } async notify() { const { ctx } = this const xml = ctx.request.body.toString('utf-8') const result = await ctx.service.pay.notify(xml) if (result.return_code === 'SUCCESS' && result.result_code === 'SUCCESS') { // 处理订单逻辑 ctx.body = `<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>` } else { ctx.body = `<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[FAIL]]></return_msg></xml>` } } } module.exports = PayController ``` 以上代码仅为示例代码,实际使用需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值