<?phpnamespace app\api\lib;
use think\Controller;
use EasyWeChat\Factory;class Pay extends Controller
{   public $config;public $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';/** 初始化数据*/public function initialize(){$this->config = config('web.WechatPay');// $this ->config = [// 前面的appid什么的也得保留哦//'app_id'             => 'xxxx',//'mch_id'             => 'your-mch-id',//'key'                => 'key-for-signature',//'cert_path'          => 'path/to/your/cert.pem', // XXX: 绝对路径!!!!//'key_path'           => 'path/to/your/key',      // XXX: 绝对路径!!!!//'notify_url'         => '默认的订单回调地址',     // 你也可以在下单时单独设置来想覆盖它// 'device_info'     => '013467007045764',// 'sub_app_id'      => '',// 'sub_merchant_id' => '',// ...];}/** 支付*/public function pay($orderData,$code){$config = $this->config;if($orderData['type'] == 1){$config['notify_url'] = 'https://api.zkjz.com/api/notify/rechargeNotify';//支付完成回调充值地址url,不能带参数}else{$config['notify_url'] = 'https://api.zkjz.com/api/notify/orderNotify';//支付完成回调订单地址url,不能带参数}//获取OPENID$openid = $this->getOpenID($code);$param = array('body' =>$orderData['title'], //商品信息'out_trade_no'=>$orderData['order_num'],//商户订单编号'total_fee'=>$orderData['money'] * 100, //总金额'openid'=>$openid,//用户openid'trade_type'=>'JSAPI',//交易类型);$app = Factory::payment($config);$jssdk = $app->jssdk;$result = $app->order->unify($param);if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){$config = $jssdk->bridgeConfig($result['prepay_id'], false);return $config;}else{return false;}}/** 获取OPENID*/public function getOpenID($code){$config = config('web.wechat');$app = Factory::miniProgram($config);$res = $app->auth->session($code);return $res['openid'];}/** 对要发送到微信统一下单接口的数据进行签名*/public  function getSign($Obj){foreach ($Obj as $k => $v){$param[$k] = $v;}//签名步骤一:按字典序排序参数ksort($param);$String = self::formatBizQueryParaMap($param, false);//签名步骤二:在string后加入KEY//申请支付后有给予一个商户账号和密码,登陆后自己设置的key$String = $String."&key=".$this->config['key'];//签名步骤三:MD5加密$String = md5($String);//签名步骤四:所有字符转为大写$result_ = strtoupper($String);// var_dump($result_);return $result_;}/**排序并格式化参数方法,签名时需要使用*/public static function formatBizQueryParaMap($paraMap, $urlencode){$buff = "";ksort($paraMap);foreach ($paraMap as $k => $v){if($urlencode){$v = urlencode($v);}//$buff .= strtolower($k) . "=" . $v . "&";$buff .= $k . "=" . $v . "&";}$reqPar = "";if (strlen($buff) > 0){$reqPar = substr($buff, 0, strlen($buff)-1);}return $reqPar;}/** 生成随机字符串方法*/public function createNoncestr($length = 32 ){$chars = "abcdefghijklmnopqrstuvwxyz0123456789";$str ="";for ( $i = 0; $i < $length; $i++ ) {$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);}return $str;}/** 数组转字符串方法*/public function arrayToXml($arr){$xml = "<xml>";foreach ($arr as $key=>$val){if (is_numeric($val)){$xml.="<".$key.">".$val."</".$key.">";}else{$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";}}$xml.="</xml>";return $xml;}/** 将xml字符串转换为数组*/public static function xmlToArray($xml){$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);return $array_data;}/** 发送xml请求方法*/public static function postXmlCurl($xml, $url, $second = 30) {$ch = curl_init();//设置超时curl_setopt($ch, CURLOPT_TIMEOUT, $second);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //严格校验//设置headercurl_setopt($ch, CURLOPT_HEADER, FALSE);//要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//post提交方式curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);curl_setopt($ch, CURLOPT_TIMEOUT, 40);set_time_limit(0);//运行curl$data = curl_exec($ch);//返回结果if ($data) {curl_close($ch);return $data;}else {$error = curl_errno($ch);curl_close($ch);return json(['msgArr'=>"curl出错,错误码:$error"]);}}
}

Thinkphp使用EasyWeChat支付相关推荐

  1. php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

    此文章入选<PHP领域内容榜>第4名 文章介绍 本文主要介绍通过thinkPHP5和第三方支付类包(WeChatDeveloper)实现快速接入微信扫码支付和微信H5手机网站支付(非微信浏 ...

  2. php接入微信JSAPI支付,微信内拉起支付,基于thinkPHP框架 WeChatDeveloper支付类包

    文章:php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南 文章:php快速接入支付宝即时支付,PC网站支付和手机网站支付 ...

  3. php微信支付jsapi,ThinkPHP实现微信支付(jsapi支付)

    这篇文章主要介绍了ThinkPHP实现微信支付(jsapi支付)流程教程详解,需要的朋友可以参考下 之前写过一篇文章讲了PHP实现微信支付(jsapi支付)流程 ,详见文章:PHP实现微信支付(jsa ...

  4. php在线支付系统,Thinkphp各大支付平台在线支付集成源码

    支付配置ThinkPay\Application\Common\Conf\config.php array( /* 支付设置 */ 'payment' => array( 'tenpay' =& ...

  5. 2016最新php支付平台源码,Thinkphp各大支付平台在线支付集成源码

    支付配置ThinkPay\Application\Common\Conf\config.phparray(/*支付设置*/ 'payment' => array('tenpay' => a ...

  6. Thinkphp整合微信支付功能

    1.微信公众号: 独特的appid.appscrect.接口权限之中设置可以获取用户ID信息权限的域名(每个用户对于不同公众都会有一个特有ID,通过这个ID获取用户微信账号基本信息.详情看微信开发者文 ...

  7. php结账系统,pay: ThinkPHP开源聚合支付系统

    Cmpay_2018v1.1.0_Beta(正式版本) 项目介绍 Cmpay聚合支付 Cmpay草帽聚合支付使用ThinkPHP框架开发,已接入微信.支付宝等主流支付渠道. 目前已经接入支付渠道:微信 ...

  8. ThinkPHP 整合微信支付 扫码支付 模式二 图文教程

    这篇文章主要介绍扫码支付场景二. 目前有两种模式,模式一比模式二稍微复杂点,至于模式一与模式二的具体内容,流程,微信开发文档都有详细介绍,这里就不多说废话,接下来赶紧上教程! Table of Con ...

  9. 【网站支付PHP篇】thinkPHP集成支付宝支付(担保交易)

    目录 系列说明 开发环境 部署支付宝 支付请求 支付宝返回处理 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家有用.这个系列会讲以下第三方支付平台的集成: ...

最新文章

  1. 如何用SPY++工具查看窗体的句柄
  2. jQuery在绑定事件时如何传入参数
  3. 循环数组函数c语言,C语言练习题2(分支结构循环结构数组函数2009-2012二级真题)..doc...
  4. struct2 开发环境搭建 问题
  5. C#调用WebService
  6. 匈牙利算法c语言代码,漫谈匈牙利算法
  7. 第一章计算机基础知识作业答案,第一章 计算机基础知识.doc第一次作业
  8. 漫谈Java IO之 Netty与NIO服务器
  9. socket,TCP/IP的理解(转)
  10. 谈谈Ext JS组件之引子
  11. 创业挑战杯获奖作品范例_2017年挑战杯大学生创业大赛优秀作品
  12. 三位分节制顺口溜_一位高人写的ISO14001顺口溜,超赞!
  13. 鼎捷t100架构_浅谈鼎捷T100 ERP的设计器使用规范
  14. do-while循环1加到100
  15. 萝卜小铺与店主的故事(十一)
  16. OC学习笔记之011IOS应用开发入门--控件2进度条、拖动条、警告框、日期选择器、选择器
  17. 1、Dreamweaver工具的使用
  18. Storm Metric
  19. 商务个人邮箱如何注册申请?商务邮箱账号怎么登录?
  20. layui的exports插件,导出excel时,长数字为科学计数法解决

热门文章

  1. linux安装i219网卡驱动下载,Linux redhat 6.5 安装网卡I219-LM 驱动
  2. SpringCloud中的application-test.yml剖析(以user模块为例)
  3. PVST的简单应用及其配置
  4. [Android Pro] Android 6.0 Root
  5. ThinkPHP框架中解决无法加载控制器的问题—原因之一
  6. mac 下 vimrc 配置
  7. EasyCVR通过大华SDK接入设备不能进行云台控制,如何判断是否为设备问题?
  8. oracle加上默认值,Oracle创建表,并添加默认值和备注
  9. zbbz的lisp_Github上四种Lisp方言的流行度
  10. 千与千寻 中日歌词与罗马音译(最准确啦)