博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel教程: 3分钟实现小程序微信支付接入(上)——唤起支付
阅读量:6703 次
发布时间:2019-06-25

本文共 3023 字,大约阅读时间需要 10 分钟。

微信支付的接入,如果不使用成熟的开发包,将是巨大的工作量。

依赖 EasyWechat

先在 laravel 项目中依赖 easywechat 这个包

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

配置

在 .env 中添加微信支付的 key 配置

WECHAT_PAYMENT_SANDBOX=falseWECHAT_PAYMENT_APPID=wx64c***WECHAT_PAYMENT_MCH_ID=150***WECHAT_PAYMENT_KEY=ZZDDD***WECHAT_PAYMENT_CERT_PATH=/home/secret/apiclient_cert.pemWECHAT_PAYMENT_KEY_PATH=/home/secret/apiclient_key.pemWECHAT_PAYMENT_NOTIFY_URL=https://www.mysite.com/gateway/wxpay/callback
  • 如果你需要额外的配置,可以运行 php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider" ,然后在 config/wechat.php 中可以看到 easywecaht 可以支持的全部配置。

编写接口逻辑

新建一个 App/Repositories/PayRepository.php

wxpay = app('easywechat.payment'); $unify = $this->wxpay->order->unify([ 'body' => $this->transfer->name . ' ' . $this->tickets->count() . '张票', 'out_trade_no' => '订单号', 'total_fee' => bcmul('价格:单位元', 100), 'trade_type' => 'JSAPI', 'openid' => $user->openid, // 用户的openid ]); if ($unify['return_code'] === 'SUCCESS' && !isset($unify['err_code'])) { $pay = [ 'appId' => config('wechat.payment.default.app_id'), 'timeStamp' => (string) time(), 'nonceStr' => $unify['nonce_str'], 'package' => 'prepay_id=' . $unify['prepay_id'], 'signType' => 'MD5', ]; $pay['paySign'] = generate_sign($pay, config('wechat.payment.default.key')); return $pay; } else { $unify['return_code'] = 'FAIL'; return $unify; } }}

新建一个 App/Http/Controllers/PayController.php

pay_repository = $pay_repository; } /** * 微信支付 * * @return Response */ public function pay() { $user = auth()->user(); $pay = $this->pay_repository->pay($user); return Response::success(['pay' => $pay]); }}

绑定路由 routes/api.php

name('pay');

编写JS逻辑

在页面 JS 里面编辑支付逻辑

onPay: function (e) {        wx.request({            url: '/api/buy/pay',            method: 'POST',            success: (res) => {                if (res.data.pay.result_code != 'SUCCESS') {                    return wx.showModal({                        content: res.data.pay.return_msg + res.data.pay.err_code_des,                        showCancel: false                    });                }                res.data.pay.success = (res) => {                    wx.showModal({                        content: '您已成功支付',                        showCancel: false                    });                };                res.data.pay.fail = (res) => {                    if (res.errMsg == 'requestPayment:fail cancel') {                        return wx.showToast({                            icon: 'none',                            title: '用户取消支付',                        });                    }                };                wx.requestPayment(res.data.pay);            }        });    },

在页面按钮上调用

效果

clipboard.png

支付成功回调

关于回调处理请期待下一篇文章。~

回调处理请见下文:

已知异常

如果你不添加.env,可能会报容器找不到这个应用的报错。

转载地址:http://mdblo.baihongyu.com/

你可能感兴趣的文章
stm32学习笔记----双串口同时打开时的printf()问题
查看>>
Java代码简化神器-Lombok
查看>>
How do I create a List in Scala?
查看>>
lintcode:移动零
查看>>
JavaScript闭包之“词法作用域”
查看>>
BZOJ2679 : [Usaco2012 Open]Balanced Cow Subsets
查看>>
如何实现比较复杂的分组、小计与合计
查看>>
IIS7.5上的REST服务的Put操作发生HTTP Error 405.0 - Method Not Allowed 解决方法
查看>>
咱们来聊聊JS中的异步,以及如何异步,菜鸟版
查看>>
ListFragment的使用
查看>>
bufferedimage 转换成 inputstream并保存文件
查看>>
IntelliJ Idea13无法创建maven模板
查看>>
数组和集合的相互转换
查看>>
sql STUFF用法
查看>>
BZOJ3346 : Ural1811 Dual Sim Phone
查看>>
i++与++i 辨析
查看>>
WebService 之 已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。...
查看>>
ImportError: The _imagingft C module is not installed
查看>>
李洪强iOS经典面试题144-数据存储
查看>>
svn 和 git的区别
查看>>