easywechat之微信支付--在thinkPHP5中的使用
1. 准备工作
1.1 easywechat 安装完成
未安装移步至 -> http://www.cnblogs.com/flyphper/p/8484600.html
1.2 确定支付相关的配置参数已经配置好
<?php return [
/**
* Debug 模式,bool 值:true/false
*
* 当值为 false 时,所有的日志都不会记录
*/
'debug' => true,
/**
* 账号基本信息,请从微信公众平台/开放平台获取
*/
'app_id' => '', // AppID
'secret' => '', // AppSecret
'token' => '', // Token
'aes_key' => '', // EncodingAESKey,安全模式下请一定要填写!!!
/**
* 日志配置
*
* level: 日志级别, 可选为:
* debug/info/notice/warning/error/critical/alert/emergency
* permission:日志文件权限(可选),默认为null(若为null值,monolog会取0644)
* file:日志文件位置(绝对路径!!!),要求可写权限
*/
'log' => [
'level' => 'debug',
'permission' => 0777,
'file' => LOG_PATH.'easywechat.log',
],
/**
* OAuth 配置
*
* scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
* callback:OAuth授权完成后的回调页地址
*/
'oauth' => [
'scopes' => ['snsapi_userinfo'],
'callback' => 'home/oauthallback',
],
/**
* 微信支付
*/
'payment' => [
'merchant_id' => '', // 商户号
'key' => '',
'cert_path' => '', // XXX: 绝对路径!!!!(前往微信公众平台上下载)
'key_path' => '', // 同上
// 'device_info' => '',
// 'sub_app_id' => '',
// 'sub_merchant_id' => '',
// ...
],
/**
* Guzzle 全局设置
*
* 更多请参考: http://docs.guzzlephp.org/en/latest/request-options.html
*/
'guzzle' => [
'timeout' => 3.0, // 超时时间(秒)
'verify' => true
]
];
2. 支付操作
2.1 添加订单
wechat1.php
<?php
/**
* ======================================
*
* Created by Super Demon W.
* Author: \/Lin\/ 764582547@qq.com
* Date: 2018/2/22
* Time: 17:09
*
* =======================================
*/
namespace app\home\logic; use think\Model;
use EasyWeChat\Foundation\Application;
use EasyWeChat\payment\Order;
use think\Config; class Wechat1 extends Model {
/**
* 支付准备
* @param $data
* @param $openid
* @return array
*/
public function WeixinPrePay($data, $openid) {
$options = Config::get('wechat');
$app = new Application($options);
$payment = $app->payment;
$attributes = [
'body' => '***-充值',
'out_trade_no' => $data['order_sn'],
'total_fee' => $data['money']*100,
#'spbill_create_ip' => '***',
'notify_url' => url('**/notify'), // 回调地址
'trade_type' => 'JSAPI',
'openid' => $openid,
]; $order = new Order($attributes);
$result = $payment->prepare($order);
if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS') {
$prepayId = $result->prepay_id;
$json = $payment->configForPayment($prepayId);
return ['status' => 200, 'msg' => '', 'data' => $json];
} else {
return ['status' => 400, 'msg' => '调起支付失败,请稍后尝试'];
}
}
}
2.2 添加订单后调起支付
towxpay.php
namespace app\home\controller;
use app\home\logic\Wechat1;
use think\Session;
use think\Db; public function towxpay() {
$uid = Session::get('user_auth')['uid'];
$money = input('recharge_money', '');
$wechat = new Wechat1();
$order_sn = MakeOrderSn(); // 设置订单号
# 添加订单
$data = array(
// ...yourdata
);
$order_id = db('order')->insertGetId($data);
if (!$order_id) {
$this->error('订单添加失败');
}
$openid = db('member')->where('uid', $uid)->value('openid');
$check = $wechat->WeixinPrePay($data, $openid);
if ($check['status'] == 400) {
$this->error($check['msg']);
}
session::set('zejc_order_id', $order_id);
$this->assign('jsonData', $check['data']);
return $this->fetch();
}
2.3 调取支付页面
towxpay.html
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>发起支付-支付</title>
<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',{$jsonData},
function(res){
if (res.err_msg == "get_brand_wcpay_request:ok") { // 支付成功
location.href = '***?type=success';
}
if(res.err_msg == "get_brand_wcpay_request:fail") { // 支付失败
location.href = '***?type=fail';
}
if (res.err_msg == "get_brand_wcpay_request:cancel") { // 取消支付
location.href = '***?type=cancel';
}
}
);
} function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
callpay();
</script>
</head>
<body>
<div align="center" style="color: #00a157; margin-top: 20%">
支付中...
</div>
</body>
</html>
注: 统一下单后返回prepay_id后要调用小程序支付函数,有最重要的一步,是需要再次签名的,用统一下单返回的sign(签名)是没有用的。
================== 至此,微信支付结束 ===============
easywechat之微信支付--在thinkPHP5中的使用的更多相关文章
- Laravel使用EasyWechat 进行微信支付
微信支付和EasyWeChat这个包都是巨坑, 文档写的稀烂, 记录下防止以后又重复踩坑: 安装教程在这: https://www.jianshu.com/p/82d688e1fd2a
- Koa系框架(egg/cabloy)如何获取微信支付回调请求中的xml参数
背景 在Koa系框架(如EggJS)中进行微信支付开发时,遇到一个问题:微信支付平台会发送一个回调请求,通知支付订单的处理结果.该请求传入的参数是xml格式,而Koa中间件koa-bodyparser ...
- 微信支付.NET SDK 中的BUG(存疑)
BUG出现在类文件WxPayData.cs中的FromXml(string xml)方法 /** * @将xml转为WxPayData对象并返回对象内部的数据 * @param string 待转换的 ...
- 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包
微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...
- 微信支付开发(1) JS API支付
关键字:微信支付 微信支付v3 jsapi支付 统一支付 Native支付 prepay_id 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpayv3 ...
- 微信支付JsAPI
https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip 下载获取微信支付demo压缩包 打开压缩包,并将其中 Wxpay ...
- PHP微信支付开发实例
这篇文章主要为大家详细介绍了PHP微信支付开发过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PHP微信支付开发过程,分享给大家,供大家参考,具体内容如下 1.开发环境 Thinkphp 3. ...
- 微信支付开发(1) JS API支付V3版(转)
http://www.cnblogs.com/txw1958/p/wxpayv3-jsapi.html 本文介绍微信支付下的jsapi实现流程 前言 微信支付现在分为v2版和v3版,2014年9月10 ...
- Android开发 --微信支付开发(转载!)(开发工具:Eclipse)
Android_APP 微信支付接口开发 日期:2015-10-06 12:47:33 作者: 来源: 人气:3549 1.首先说一下我们在开发微信支付接口的时候遇到最多和最疑惑的问题,那就是明明 a ...
随机推荐
- android Fragment的数据传递
Bundle传递参数 Fragment1 fragment1 = new Fragment1();Bundle bundle = new Bundle();bundle.putString(" ...
- re模块与正则表达式
一.正则表达式概念 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计算机科 ...
- Cypher查询语言--Neo4j之聚合函数(五)
目录 聚合Aggregation 计数 计算节点数 分组计算关系类型 计算实体数 计算非空可以值数 求和sum 平均值avg 最大值max 最小值min 聚类COLLECT 相异DISTINCT 聚合 ...
- javascipt中的DOM对象
1.HTML中DOM对象的概念 HTML Document Object Model(文档对象模型) HTML DOM定义了访问和操作HTML文档的标准方法 HTML DOM把HTML文档呈现为带有元 ...
- ABP官方文档翻译 10.1 ABP Nuget包
ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OD ...
- Go笔记-结构体
[定义] type identifier struct{ field1 type1 field2 type2 ... } // 声明 var s identifier identifier.field ...
- mybatis No enum const class org.apache.ibatis.type.JdbcType.Integer
mybatis报错:没有Integer这个类型的jdbcType值 原因:mybatis配置重的jdbaType类型要是大写的 如图所示:
- 夏令营提高班上午上机测试 Day 3 解题报告
今天的题的确水.T3还是一道NOIP原题. 嘛,多刷点水题也不是什么坏事嘛. 说来也快,夏令营结束了整一星期了呢.大家也都回到了日常的暑假生活呢. 今天学业水平测试出成绩了...嗯结果还算满意呢,至少 ...
- 【转】Android UI 五种布局
在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用 ...
- 使用angular/react/vue实现相同的面试题组件
面试题要求如下所示 1.angular: <!DOCTYPE html><html lang="en"><head> <meta char ...