为了账号安全,请及时绑定邮箱和手机立即绑定

laravel+微信支付源码

标签:
PHP

业务流程时序图

webp  image

仔细阅读并看懂 (不是看过,是看明白+看完微信官方文档 微信开放平台文档

1.下载微信支付php demo 放在自己的线上服务器上,配置好ngixn(或者apache)网站根目录到php_sdk_v3.0.9/ 下面,将APPID等填入WxPay.Config.php 文件 配置好微信支付需要的信息。

2.商户号微信支付回调地址配成 www.xxx.com/;公众号配置好回调url (方便或者openid)。

3.demo已经准备就绪,浏览器访问www.xxx.com/jsapi.php 出现支付页面,点击支付,弹出输入密码界面,完美!demo已经运行成功,说明微信平台配置没有问题,有问题的请返回去看一下微信的官方文档。

4.接下来进入主题,准备好laravel(我用的是5.4),将php_sdk_v3.0.9/ 复制到app/下改名Wecaht/

webp  image

5.这几个文件都要改一下require的路径,改为绝对路径 例如:

require_once DIR."/../lib/WxPay.Config.Interface.php";

webp  image

6.复制jsapi.php 到resources/views/ 改名jsapi.blade.php

webp  image

7.jsapi.blade.php 源码如下

 <?php require_once __DIR__.'/../../../app/Wecaht/lib/WxPay.Api.php';require_once __DIR__.'/../../../app/Wecaht/example/WxPay.JsApiPay.php';// require_once __DIR__.'/../../../app/Wecaht/example/log.php';// $logHandler= new CLogFileHandler(storage_path('logs').'wechat'.date('Y-m-d').'.log');// $log = Log::Init($logHandler, 15);//①、获取用户openid$tools = new JsApiPay(); $openId = $tools->GetOpenid("/pay/wechat?sn=".$orderInfo['sn']); //传参要这样传,还要改一下example/WxPay.JsApiPay.php文件//②、统一下单$input = new WxPayUnifiedOrder();$input->SetBody("微信支付");$input->SetAttach("微信支付");// $input->SetOut_trade_no('xxx'.date("YmdHis").rand(1,100));$input->SetOut_trade_no($orderInfo['sn']);$input->SetTotal_fee($orderInfo['payment']*100);$input->SetTime_start(date("YmdHis"));$input->SetTime_expire(date("YmdHis", time() + 600));$input->SetGoods_tag("一袋盐");$input->SetNotify_url("http://www.xxx.xyz/pay/notify");//这里填你的回调路径,是绝对路径,例如http://aaa.com/wechat/notify$input->SetTrade_type("JSAPI");$input->SetOpenid($openId);$config = new WxPayConfig();// $logHandler->write(json_encode($input));// print_r($input);die;$order = WxPayApi::unifiedOrder($config,$input);// echo '**统一下单支付单信息** ';$jsApiParameters = $tools->GetJsApiParameters($order); //获取共享收货地址js函数参数// $editAddress = $tools->GetEditAddressParameters(); //③、在支持成功回调通知中处理成功之后的事宜,见 notify.php/** * 注意: * 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功 * 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”, * 参考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html) */  ?> **该笔订单支付金额为{{$sum}}元** 立即支付

WxPay.JsApiPay.php 还要改个东西

 public function GetOpenid($addUrl="") { //通过code获得openid if (!isset($_GET['code'])){ //触发微信返回code码 $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$addUrl); $url = $this->_CreateOauthUrlForCode($baseUrl); Header("Location: $url"); exit(); } else { //获取code码,以获取openid         $code = $_GET['code']; $openid = $this->getOpenidFromMp($code); return $openid; } }

8.新建AppController

 public function wechat(Request $request)     {         log::info("AppController wechat input",$request->all());         if(!$request->input('sn')){             return redirect()->back();         }         $orderInfo = object2array2(OMD::where('sn',$request->input('sn'))->first());         if(!$orderInfo){             return redirect()->back();         }         return view("jsapi")             ->with(['orderInfo'=>$orderInfo]);//把参数带到jsapi.blade.php     } public function notify(Request $request){         $all = $request->all();         Log::info('AppController notify input:', $all);     //你的回调业务逻辑     }

创建路由

 Route::group(['prefix' => 'pay' ,'namespace' => 'App'], function () { //微信支付     Route::any('wechat','AppController@wechat');      Route::any('notify','AppController@notify'); });

9.到此大功告成,下次更新一个基于EasyWacht的教程。



作者:刀鱼要到岛上掉
链接:https://www.jianshu.com/p/a25de96e9405


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消