3分钟实现小程序唤起微信支付 Laravel教程
微信支付的接入,如果不使用成熟的开发包,将是巨大的工作量。
依赖 EasyWechat
先在 laravel 项目中依赖 easywechat 这个包
```composer require "overtrue/laravel-wechat":"^4.0"
```
配置
在 .env 中添加微信支付的 key 配置
```
WECHAT_PAYMENT_SANDBOX=false
WECHAT_PAYMENT_APPID=wx64c***
WECHAT_PAYMENT_MCH_ID=150***
WECHAT_PAYMENT_KEY=ZZDDD***
WECHAT_PAYMENT_CERT_PATH=/home/secret/apiclient_cert.pem
WECHAT_PAYMENT_KEY_PATH=/home/secret/apiclient_key.pem
WECHAT_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
<?php
namespace App\Repositories;
use App\User;
use function EasyWeChat\Kernel\Support\generate_sign;
class PayRepository
{
/**
* 发起微信支付
*
* @return Array
*/
public function pay(User $user)
{
$this->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
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Repositories\PayRepository;
use Illuminate\Support\Facades\Response;
class PayController extends Controller
{
/**
* PayRepository
*
* @var PayRepository
*/
protected $pay_repository;
public function __construct(PayRepository $pay_repository)
{
$this->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
<?php
Route::post('/buy/pay', 'PayController@pay')->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);
}
});
},
<p>在页面按钮上调用</p>
```<button ontap="onPay">支付</button>
效果

支付成功回调
关于回调处理请期待下一篇文章。
原文地址:https://segmentfault.com/a/1190000016177743
3分钟实现小程序唤起微信支付 Laravel教程的更多相关文章
- 微信小程序PHP 微信支付接口调用
小程序端 /** * 微信支付接口 */ wxPaymoney:function (out_trade_no, true_money){ //out_trade_no 后台统一下单接口需要用 var ...
- 小程序开通微信支付 --- 微信商户平台绑定微信小程序APPID
首先情况是这样的:现有公司有个公众号,已经开通了微信支付(已经有一个商户平台),现在需要开发 微信小程序(也有微信支付),如果在小程序里面重新申请 微信支付,就显得比较麻烦.腾讯官方已经提供了 一个商 ...
- springboot+微信小程序实现微信支付【统一下单】
说明: 1)微信支付必须有营业执照才可以申请 2)微信支付官方api是全套的,我这是抽取其中的统一下单api,做了一个简单的封装 首先看看微信支付 商户系统和微信支付系统主要交互: 1.小程序内调用登 ...
- 微信小程序调用微信支付接口
本文链接:https://blog.csdn.net/u012667477/article/details/80940578前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过 ...
- 微信小程序调微信支付
今天写小程序的支付接口,参照的当然是微信支付API了.(结尾附上第二步全部代码php版) 另外,我也参照了简书上的这篇文章,浅显易懂:https://www.jianshu.com/p/72f5c1e ...
- 微信小程序之微信支付C#后台(统一下单)
一.微信小程序支付 1.微信小程序端请求支付接口 商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付.具体可以查看接口示例. 接口传入参数示例: <xm ...
- .NET开发微信小程序-接收微信支付回调数据
获取微信支付传回来的数据 1.MVC控制器 /// <summary> /// 付款返回的数据 /// </summary> /// <returns></r ...
- 微信小程序 使用微信支付功能实现在线订单支付
以前做过PC页面微信支付,但是这次在小程序 直接调用微信支付功能还是方便很多 先放个微信官方API链接:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_a ...
- 微信小程序调用微信支付
1,首先我们先缕清支付的整个流程,详见https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3,第一 ...
随机推荐
- cocos2d-x andriod, Box2D.h: No such file or directory
原文链接:r=47980">http://www.cocos2d-x.org/forums/6/topics/47503? r=47980 You need to include li ...
- WebGIS开发技术杂谈
WebGIS项目的开发主要是B/S架构.最流行的是clientjavascript,server端java. 另外还有flexclient. client主要完毕用户交互.向server端发送请求并传 ...
- Erlang下与其他程序和语言的通信机制(1)
在Erlang运行时中,提供了几种机制来实现与其它程序或者语言的通信.一种为分布式Erlang,一种为端口,其中端口分为普通端口和链入式驱动端口,还有后面引入的NIFs. 分布式Erlang:一个Er ...
- CodeForces 653 A. Bear and Three Balls——(IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2))
传送门 A. Bear and Three Balls time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Skyline V6.6.1安装文件下载及使用
1.下载地址:http://www.skylineglobe.com/skylineglobe/corporate/download/DownloadCenter.aspx 2.安装指南: ...
- c++ 写进文件并读出
#include <iostream>#include <fstream>#include <vector>#include <string> int ...
- Element-UI 笔记
1.表单验证 官官方地址 : https://element.eleme.cn/#/zh-CN/component/form 使用rules进行表单字段验证 https://blog.csd ...
- [JZOJ3809]设备塔
其实我并没有JZOJ的号...但既然dalao说了是JZOJ上的题,那就是了吧...... 为了封印辉之环,古代塞姆利亚大陆的人民在异空间中建造了一座设备塔. 简单的说,这座设备塔是一个漂浮在异空间中 ...
- AFN请求后台返回数据为NSInlineData类型的处理
在利用AFN进行数据解析时出现返回数据为 <7b227374 61747573 223a302c 226d6573 73616765 223a22e6 82a8e79a 84e6898b e69 ...
- 【SQL】INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND
INTERVAL YEAR TO MONTH: 作为年和月的时间间隔存储 INTERVAL DAY TO SECOND: 作为天.小时.分和秒的时间间隔存储(DAY,HOUR,MINUTE,SECON ...