//安装
composer require “overtrue/laravel-wechat:~4.0”

在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 无需手动注册)

‘providers’ => [
// …
Overtrue\LaravelWeChat\ServiceProvider::class,
],
‘aliases’ => [
// …
‘EasyWeChat’ => Overtrue\LaravelWeChat\Facade::class,
],

创建配置文件:

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

修改应用根目录下的 config/wechat.php 中对应的参数即可。
参数在微信公众平台配置和查看
同时设置号 域名 白名单 等
demo
/*
* 公众号
/
。。。。
‘official_account’ => [
‘default’ => [
‘app_id’ => env(‘WECHAT_OFFICIAL_ACCOUNT_APPID’, ‘wxe4f459877777’), // AppID
‘secret’ => env(‘WECHAT_OFFICIAL_ACCOUNT_SECRET’, ‘2323233uewuwuewueyue’), //
‘token’ => env(‘WECHAT_OFFICIAL_ACCOUNT_TOKEN’, ‘weee’), // Token
‘aes_key’ => env(‘WECHAT_OFFICIAL_ACCOUNT_AES_KEY’, ‘23333333’),
/

* OAuth 配置
*
* scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
* callback:OAuth授权完成后的回调页地址(如果使用中间件,则随便填写。。。)
*/
// ],
],
],
。。。。。
//支付所需参数 微信商家平台里获取对应参数
‘pay_config’ => [
// 必要配置
‘app_id’ => ‘同上’,
‘mch_id’ => ‘368779###’,
‘secret’ => ‘3b1e348d68610d07wqwqwqw3ee’,
‘key’ => ‘ecipa2018wxhuwqwqwqw0’, // API 密钥
// 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
‘cert_path’ => ‘…/cert/apiclient_cert.pem’, // XXX: 绝对路径!!!!
‘key_path’ => ‘…/cert/apiclient_key.pem’, // XXX: 绝对路径!!!!
//‘notify_url’ => ‘http://’.$_SERVER[‘HTTP_HOST’].’/api/WeChatNotify’, // 默认的订单回调地址,你也可以在下单时单独设置来想覆盖它
//其他参数
],
证书 微信公众平台有下载地址
···

配置完成后
开始使用
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
use EasyWeChat\Payment\Kernel\BaseClient;
use EasyWeChat\Factory;

//用户点击支付 生成预支付订单
public function PrepayOrder(Request r e q u e s t , request, request,order_sn) {

$config = config(‘wechat.pay_config’);
a p p = F a c t o r y : : p a y m e n t ( app = Factory::payment( app=Factory::payment(config);
$jssdk = $app->jssdk;
//微信以分为单位 注意订单价格
$actualPrice = $order[‘actual_price’]*100;
//生成预付单
$host = $_SERVER[‘HTTP_HOST’];
try {
$result = $app->order->unify([
‘body’ => $order[‘name’],
‘out_trade_no’ => $order[‘order_sn’],
‘total_fee’ => $actualPrice,//todo
‘attach’ => $order[‘id’],
‘spbill_create_ip’ => ‘’, // 可选,如不传该参数,SDK 将会自动获取相应 IP 地址
//‘notify_url’ => c o n f i g [ ′ n o t i f y u r l ′ ] , / / 支 付 结 果 通 知 网 址 , 如 果 不 设 置 则 会 使 用 配 置 里 的 默 认 地 址 ′ n o t i f y u r l ′ = > ′ h t t p : / / ′ . config['notify_url'], // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'notify_url' => 'http://'. config[′notifyu​rl′],//支付结果通知网址,如果不设置则会使用配置里的默认地址′notifyu​rl′=>′http://′._SERVER[‘HTTP_HOST’].’/api/WeChatNotify’,
‘trade_type’ => ‘JSAPI’,//支付方式
‘openid’ => $openid,
]);
} catch (InvalidConfigException $e) {
}
//预支付订单号prepayId, 生成支付 JS 配置
$prepayId = $result[‘prepay_id’];
$jsApiParameters = j s s d k − > b r i d g e C o n f i g ( jssdk->bridgeConfig( jssdk−>bridgeConfig(prepayId);
a r r = [ ′ e r r o r ′ = > 0 , ′ j s A p i P a r a m e t e r s ′ = > arr = [ 'error'=>0, 'jsApiParameters'=> arr=[′error′=>0,′jsApiParameters′=>jsApiParameters,
];
return $arr;
//页面调起微信支付js

#支付后的回调-》 预支付notify_url

use EasyWeChat\Kernel\Exceptions\Exception;
use EasyWeChat\Factory;
use EasyWeChat\Payment\Kernel\BaseClient;

//支付结果
public function notify()
{
// 判断是否支付成功
$config = config(‘wechat.pay_config’);
a p p = F a c t o r y : : p a y m e n t ( app = Factory::payment( app=Factory::payment(config);
try {
BaseClient::setDefaultOptions([
‘curl’ => [
CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4,
],
‘verify’=>false //不开启CURLOPT_SSL_VERIFYPEER, 这里后来线上ssl报错加的,原因忘了
]);
$response = a p p − > h a n d l e P a i d N o t i f y ( f u n c t i o n ( app->handlePaidNotify(function ( app−>handlePaidNotify(function(message, $fail) {
$orderSn = m e s s a g e [ ′ o u t t r a d e n o ′ ] ; / / 开 启 事 务 并 上 锁 D B : : b e g i n T r a n s a c t i o n ( ) ; 检 查 价 格 / / 订 单 不 是 待 付 款 或 者 金 额 不 对 直 接 结 束 / / t o d o 价 格 ∗ 100 D B : : r o l l B a c k ( ) ; r e t u r n t r u e ; / / 用 户 是 否 支 付 成 功 i f ( message['out_trade_no']; //开启事务并上锁 DB::beginTransaction(); 检查价格 { //订单不是待付款 或者金额不对直接结束//todo价格*100 DB::rollBack(); return true; } // 用户是否支付成功 if ( message[′outt​raden​o′];//开启事务并上锁DB::beginTransaction();检查价格//订单不是待付款或者金额不对直接结束//todo价格∗100DB::rollBack();returntrue;//用户是否支付成功if(message[‘return_code’] === ‘SUCCESS’ && array_get(KaTeX parse error: Expected '}', got 'EOF' at end of input: … data_set(orderInfo,‘status’,1); //支付成功
data_set( o r d e r I n f o , ′ o u t o r d e r s n ′ , a r r a y g e t ( orderInfo,'out_order_sn',array_get( orderInfo,′outo​rders​n′,arrayg​et(message, ‘transaction_id’)); //支付单号
data_set( o r d e r I n f o , ′ p a y s t a t u s ′ , 1 ) ; / / 支 付 成 功 d a t a s e t ( orderInfo,'pay_status',1); //支付成功 data_set( orderInfo,′pays​tatus′,1);//支付成功datas​et(orderInfo,‘pay_time’,date(“Y-m-d H:i:s”)); //支付时间
data_set( o r d e r I n f o , ′ a t t r i b u t e s ′ , j s o n e n c o d e ( [ ] ) ) ; / / 清 空 预 支 付 订 单 i d i f ( orderInfo,'attributes',json_encode([]));//清空预支付订单id if( orderInfo,′attributes′,jsone​ncode([]));//清空预支付订单idif(orderInfo->save()){
DB::commit();
}else{
//纪录错误日志。。

                    $error   = new ErrorLogModel($data);$error->save();DB::rollBack();}}else{//支付失败直接结束DB::rollBack();return true;}}// 添加账单 --无账单处理//微信和短信通知支付成功$goods = new GoodsModel;//获取商品详情$goodsDetails = $goods->getGoodsById($message['attach']);//微信通知ExamNotify::notifyWechat($goodsDetails,$orderInfo->user_id, $message['openid']);// 短信通知to或邮件通知$phone = UserModel::query()->where('id', $orderInfo->user_id)->value('phone');if ($phone) {ExamNotify::notifySms($goodsDetails,$orderInfo->user_id);}else{ExamNotify::notifyEmail($goodsDetails,$orderInfo->user_id);}});return $response;} catch (Exception $e) {// 纪录日志$data = ['note' => '微信通知异常','params' => json_encode($e),'user_id' => 0,'code' => 'wechat_notify','ip' => ip2long(request()->ip()),];$error   = new ErrorLogModel($data);$error->save();}

作者:胡知鱼
链接:https://www.jianshu.com/p/8dd09d446f20
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

esaywechat 微信公众号jsapi支付相关推荐

  1. java微信公众号JSAPI支付以及所遇到的坑

    java微信公众号JSAPI支付以及所遇到的坑 上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http:/ ...

  2. 关于微信公众号jsapi支付传值的问题

    刚开始接触微信公众号没有多久,只是做了一些简单的操作,如页面显示,近期,需要做一个微信公众号的支付功能,对于小白的我是很痛苦的,忍着痛,勇敢的往上爬. 首先上网查资料,找demo,之前几天一直没有信心 ...

  3. 微信公众号jsapi支付

    最近要弄个微信公众号支付,于是百度了很多,总结了一下 package com.github.lly835.controller.l;import java.text.SimpleDateFormat; ...

  4. php ci框架 微信公众号 JSAPI支付

    打开微信商户平台的开发文档,下载php版的SDK与Demo 准备好参数: 1:微信公众号AppID, 2:微信公众号AppSecret, 微信公众平台,商户平台添加好项目授权地址等内容 首先获取用户o ...

  5. 基于springboot的微信公众号JSAPI支付

    最近做了一个电商项目,写了微信公众号支付和封装的app支付.用法是大同小异. 在次之前,你需要先了解一下,微信支付的 开发文档. 具体的返回信息,参考开发文档,这里主要是把核心代码和流程写了一下.微信 ...

  6. 微信jsapi支付获取code_微信公众号JSAPI支付大致流程

    一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心->网页服务->网页 ...

  7. 微信公众号网页支付详解

    首先先看微信公众开放文档:https://blog.csdn.net/qq_41971087/article/details/82466647 其实他的下单和我们微信小程序下单是一样的请观看:http ...

  8. 微信公众号页面支付接口java,[Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付...

    [Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付 0 2015-09-15 15:00:30 一.调用微信的JS文件 1.首先要绑定[JS接口安全域名],"公众号设置&q ...

  9. 微信公众号H5支付遇到的那些坑

    简史 官方文档说的很清楚,商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 当然,最近微信支付平台也加入了纯H5支付,也就是说用户可以在微信以外的 ...

最新文章

  1. Tomcat的账号与密码
  2. mysql text 不可指定默认值
  3. undefined reference to 问题解决方法
  4. 毕业论文 | 人工智能侵权责任法律问题研究——以无人驾驶汽车为例
  5. boost::enable_current_exception用法测试程序
  6. SAP Commerce Cloud deprecation机制
  7. 用 Mathematica 获取图片的 RGB 三基色
  8. 小程序突然报module is not defined_菲尔德睡前英语小故事 | 狼来了
  9. Docker学习总结(11)——八个Docker的真实应用场景
  10. mysql binlog 恢复
  11. 为什么摩根大通「发币」标志着企业区块链应用元年?
  12. [Unity插件]着色器关键字分析工具ShaderControl
  13. maven profile <filtering>true</filtering>的作用
  14. 搞渗透!还不会信息收集的看这里(大佬的秘籍)
  15. 发明者电子实用宝典_人类发明电话后的第一次通话,竟然是来自发明者的求救声?...
  16. 贝叶斯 定理_贝叶斯定理:批判性思维框架
  17. 数组逆序重放c语言,计算概论(A)/基础编程练习2(8题)/6:数组逆序重放
  18. 老外谈社交媒体:2015社交平台最新运营技巧
  19. 关于WIN10“网络重置”后连不上网的解决方法
  20. Java运算符-逻辑运算符

热门文章

  1. 在苹果 M1 上运行 Linux 虚拟机变得容易了
  2. 图像分割GrabCut
  3. 转 Vmware虚拟机怎样实现与主机同时上网的方法。
  4. 什么是SEO,新手SEO须知!
  5. .NET开发资料 dotnet 学习的站点
  6. 便宜的Android手机值得吗?
  7. echarts 饼图的图例的颜色和图例的颜色相同的设置
  8. 什么是DAPP?DAPP和APP相比有什么区别?
  9. WiFi未来趋势如何?如何搭上物联网这条大船?
  10. 性能优化之MySQL优化(转)