微信公众号支付入门教程

概述

约两年前,团队开发了打赏项目,当时重新对微信sdk进行了简单的封装。最近发现git上EasyWeChat这个开源项目比较火爆,他重新对微信的sdk进行了封装,号称是目前最优雅的SDK,已经有4000多star,我按文档简单的测试了一下微信支付,确实很方便、很快捷、很优雅。这里为作者点个赞~

本文记录了使用Laravel 和 EasyWeChat开发微信公众号支付的过程,共分为三个部分:一、微信公众号支付的配置,二、使用JSAPI调起微信支付,三、支付成功的回调处理。

开始之前

在开始本文之前确保你已经看懂微信公众号支付文档,且看明白EasyWeChat文档,且已获取微信支付接口权限,且熟悉Laravel框架。

撸起袖子开始干

微信公众号支付的配置

1.登陆微信公众平台 找到设置>公众号设置>功能设置,按文档说明设置好JS接口安全域名和网页授权域名比如reward.xxx.com

2.找到微信支付>开发配置 配置好支付授权目录和测试授权目录比如reward.xxx.com/pay/并添加测试白名单。好,现在微信配置完成。

使用JSAPI调起微信支付

一堆流程微信官方文档已经说的很清楚,我就不在复述,主要就是先授权获取openid,然后调用统一下单API生成预付单,然后就可以调起微信支付了。

下面我们通过代码来说明整个流程

1.当用户点赞赏按钮时,赞赏程序引导用户到选择金额的界面,这个引导过程经过两次跳转:第一次跳转到
getAuthcallback方法,此方法就一个目的,静默授权拿到openid,然后存入cache;第二次跳转到选择金额的界面(收银台)。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

/**
* 第一步
* 接收client传来的参数存入session,跳转到授权authcallback:getAuthcallback方法
* @param Request $request [description]
* @return [type] [description]
*/
public function getGocashier(Request $request)
{
$params = [
'nickname' => '方兴东',
'avatar' => 'http://avatar.blogchina.com/HeadPic/79715b4b3d995d350689194113978c7b!m160',
'body' => '打赏99,爆照',
'detail' => 'detail'
];
//把参数放到闪存中
$request->session()->put('sess_wxpay_goods', $params);
return redirect('/wxpay/authcallback');
}


/**
* 第二步 授权后获取openid,并把openid 把openid存入session 并跳转到收银台
* 授权和授权回调页在同一个页,通过是否有code参数判断
* @param Request $request [description]
* @return [type] [description]
*/
public function anyAuthcallback(Request $request)
{

$app = new Application($this->config);
if(empty($request->input('code'))) {
$response = $app->oauth->scopes(['snsapi_base'])
->redirect();
return $response;
}
$user = $app->oauth->user();
$openid = $user->id;
$request->session()->put('sess_wxpay_openid', $openid);
return redirect("/wxpay/cashier");

}


/**
* 收银台从session 取出商品信息 并给用户展示选择支付多少钱的页面
* @param Request $request [description]
* @return [type] [description]
*/
public function getCashier(Request $request)
{

$vdata = $request->session()->get('sess_wxpay_goods');
return view('wxpay.cashier',compact('vdata'));



}


未完待续