/**

* Created by snow.

* IDE: PhpStorm

* Date: 2019/3/29

* Time: 8:33

*/

namespace app\park\controller;

use think\Request;

class NewPay

{

private $APPID = ;//小程序ID

private $WE_CHAT_PAY_KEY = ;//微信支付秘钥

private $MCH_ID = ;//微信支付商户号

public function pay()

{

$request = Request::instance();

//fee: 支付的金额

//openId:从前端传来,

//notify:支付成功回调url,暂时不用

$openid=$request->post('open_id');

$billid=$request->post('bill_id');

$fee=$request->post('fee');

$payResult = $this->make($fee, '第二次付款', $request->ip(), $openid, '回调地址');

if (is_null($payResult)) {

return [

'code' => 300,

'msg' => 'pay error'

];

}

$orderId = $payResult['orderNum'];//随机生成的订单号

$responseData = $payResult['response'];

if (isset($responseData['return_code']) && $responseData['return_code'] == 'SUCCESS') {//下单成功

//构造返回数据

$dataArr = [

'appId' => $this->APPID,

'nonceStr' => $this->getRandChar(30),

'package' => 'prepay_id=' . $responseData['prepay_id'],

'signType' => 'MD5',

'timeStamp' => (string)time()

];

$dataArr['paySign'] = $this->signString($dataArr);

unset($dataArr['appId']);

return [

'code' => 200,

'result' => [

'billId' => $billid,

'payData' => $dataArr

],

];

}

//下单失败返回

return [

'code' => 400,

'msg' => 'make order error'

];

}

public function make($fee, $body, $requestIP, $openId, $notify)

{

$data['appid'] = $this->APPID;//小程序Id

$data['mch_id'] = $this->MCH_ID;//微信商户号

$data['nonce_str'] = $this->getRandChar(30);//30为随机字符

$data['out_trade_no'] = $this->makeOrderId();//商户订单号,10位时间戳+6位随机

$data['body'] = $body;//商品描述

$data['total_fee'] = $fee;//金额

$data['spbill_create_ip'] = $requestIP;//终端ip

$data['notify_url'] = $notify;//通知地址

$data['trade_type'] = 'JSAPI';

$data['openid'] = $openId;

$sign = $this->signString($data);

$data['sign'] = $sign;

$xmlData = $this->arrayToXML($data);

$result = $this->sendData($xmlData, 'https://api.mch.weixin.qq.com/pay/unifiedorder');

if (is_null($result)) {//网络错误

return null;

}

$payResult = $this->xmlToArray($result);

//xml字符串转数组,返回

return [

'orderNum' => $data['out_trade_no'],

'response' => $payResult

];

}

/*

* 发送数据到微信服务器,获取支付信息

*/

private function sendData($data, $url)

{

$ch = curl_init();

//设置获取的信息以文件流的形式返回,而不是直接输出。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//不校验ssl证书

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: text/xml']);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);

if (curl_errno($ch)) {

return null;

}

curl_close($ch);

return $result;

}

/**

* 生成签名

* @param $dataArr

* @return string

*/

public

function signString($dataArr)

{

ksort($dataArr);//参数必须由abcd排序

$buff = "";

foreach ($dataArr as $k => $v) {

if ($k != "sign" && $v != "" && !is_array($v)) {

$buff .= $k . "=" . $v . "&";

}

}

$buff = trim($buff, "&");

$buff .= '&key=' . $this->WE_CHAT_PAY_KEY;

return md5($buff);

}

/**

* 获取指定长度随机字符串

* @param $length

* @return null|string

*/

public

function getRandChar($length)

{

$str = null;

$strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";

$max = strlen($strPol) - 1;

for ($i = 0; $i < $length; $i++) {

$str .= $strPol[rand(0, $max)];

}

return $str;

}

/**

* 生成商户订单号,10位时间戳+6位随机

* @return string

*/

public

function makeOrderId()

{

return time() . mt_rand(100000, 999999);

}

/**

* 数组转xml

* @param $arr

* @return string

*/

public

function arrayToXML($arr)

{

$xml = "";

foreach ($arr as $key => $val) {

if (is_numeric($val)) {

$xml .= "" . $val . "" . $key . ">";

} else {

$xml .= "" . $key . ">";

}

}

$xml .= "";

return $xml;

}

/**

* xml字符串转数组

* @param $xmlStr

* @return array

*/

public function xmlToArray($xmlStr)

{

try {

return (array)simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA);

} catch (\Exception $e) {

return null;

}

}

}

php tp5微信支付,tp5微信支付踩坑相关推荐

  1. 微信小程序uni.getImageInfo踩坑大计划

    B站https://www.bilibili.com/read/cv6317437 如果你在使用getImageInfo的时候真机调试没问题,上传生成体验版的时候或者是线上版本没反应,主要原因是网络图 ...

  2. 微信客服机器人(踩坑记录、SpringBoot、企业微信)

    微信客服机器人(踩坑记录.SpringBoot.企业微信) 转载请注明出处:https://www.jjput.com/archives/wei-xin-ke-fu-ji-qi-ren 总体流程 当有 ...

  3. 微信跳一跳高分辅助踩坑

    旧博文,搬到 csdn 原文:http://rebootcat.com/2018/01/08/wechat_jump_hack/ 最近挺火的微信跳一跳 最近新版微信的『跳一跳』小程序着实火了一把,也把 ...

  4. SpringBoot集成支付宝沙箱手机网站支付详细流程和踩坑分享

    描述 本文主要讲解SpringBoot集成支付宝沙箱手机网站支付,即网页点击按钮发起支付,跳转到沙箱app付款 由于其他博客的流程大多笼统,有时候并不能找到正确的集成方式,本文尽可能详细的阐述付款,异 ...

  5. 开发嵌入京东app h5| Hybrid | 微信小程序 | 实践踩坑总结十六条

    一 前言 笔者最近一直在开发京东app嵌入的h5项目和微信小程序商城项目,在此期间遇到很多坑.这篇文章主要是针对 h5| Hybrid | 微信小程序 三个方向来讲述我遇到的坑,以及详细讲解我是如何解 ...

  6. 企业微信自建集成应用——踩坑记录(二)

    问题五 描述:在应用配置信息中,配置可信域名(可作为应用OAuth2.0网页授权功能的回调域名),同一个域名,明明之前都可以使用校验成功了,现在把文件放到服务器上还是校验失败 原因:由于之前使用的域名 ...

  7. php silk v3 decoder,微信小程序语音搜索踩坑:silk文件格式转换,在PHP中使用

    直接调用微信小程序录音接口,然后上传到服务器,百度语音的接口是识别不了这种格式的文件,那么问题来了 一.如何转码?ffmpeg? 二.如何在PHP中使用? 本文将要解决这两个问题. 用到的第三方工具: ...

  8. vue开发微信公众号订阅消息踩坑记录

    今天做了一个微信公众号的网页开发, 使用的是vue做的开发,没错,就是微信公众号的开发,这都2021年了, 还有人有开发微信公众号的需求,我也是晕了, 微信公众号是我开发中感觉,最难调试的开发工作,没 ...

  9. Android开发之App支付功能实现及踩坑

    支付宝支付实现 1.正规支付实现 前提条件: 1. 企业或个体工商户可申请,且账号通过支付宝实名认证审核 2. 需提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致: 3. 提供APP名称或 ...

  10. 微信小程序生成分享图片踩坑大计划

    微信小程序有个非常好的缺点,就是分享不能分享到朋友圈,怎么办呢,那只好生成图片,图片里面加个小程序码. 效果图 但不过其中有坑大家注意啦 HTML代码,我这个是不显示图片的生成图片,所以canvas设 ...

最新文章

  1. ASP.NET中使用多个runat=server form
  2. Parallel学习
  3. php中empty功能,在php中empty函数起什么作用呢?
  4. linux 安装jdk(install jdk)
  5. 绕月飞行维生系统进展如何?美国人准备好了吗
  6. 第11课:动手实战基于 LSTM 轻松生成各种古诗
  7. ASP.NET MVC SSO单点登录设计与实现
  8. C51编程在不同内存空间(data xdata bdata)定义变量的注意事项
  9. 【每日一题】4月1日题目 Rinne Loves Edges
  10. zeppelin连接数据源_使用开放源代码合同(open-zeppelin)创建以太坊令牌
  11. Android BitmapShader 实战 实现圆形、圆角图片
  12. Java-异常01 Error和Exception
  13. Hadoop学习笔记(一)从官网下载安装包
  14. zabbix通过UNIXODBC连接数据库
  15. 常用的测试用例设计方法有那些?
  16. VirtualBox安装增强功能实现全屏
  17. 整车CAN网络拓扑图
  18. android 图片编辑工具,照片编辑器:Photo Editor
  19. Linux(一):概述及环境搭建
  20. 【Fuzzy】隶属度函数和模糊推理

热门文章

  1. Odoo丨如何在Odoo中修改HTML编辑工具栏?
  2. 【译】创意编码之噪音
  3. 编写一个程序从键盘输入字符,并按要求输出
  4. 数据架构学习之路(建议收藏)
  5. 强化学习笔记: 应用举例
  6. 文科计算机有哪些专业,计算机有哪些专业
  7. 将AutoCAD的dwg图纸转换为pdf
  8. 如何通过chrome来找到猫眼电影评论url
  9. 四种第三方登录的方法
  10. 拼多多加密后token破解与还原