php tp5微信支付,tp5微信支付踩坑
/**
* 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微信支付踩坑相关推荐
- 微信小程序uni.getImageInfo踩坑大计划
B站https://www.bilibili.com/read/cv6317437 如果你在使用getImageInfo的时候真机调试没问题,上传生成体验版的时候或者是线上版本没反应,主要原因是网络图 ...
- 微信客服机器人(踩坑记录、SpringBoot、企业微信)
微信客服机器人(踩坑记录.SpringBoot.企业微信) 转载请注明出处:https://www.jjput.com/archives/wei-xin-ke-fu-ji-qi-ren 总体流程 当有 ...
- 微信跳一跳高分辅助踩坑
旧博文,搬到 csdn 原文:http://rebootcat.com/2018/01/08/wechat_jump_hack/ 最近挺火的微信跳一跳 最近新版微信的『跳一跳』小程序着实火了一把,也把 ...
- SpringBoot集成支付宝沙箱手机网站支付详细流程和踩坑分享
描述 本文主要讲解SpringBoot集成支付宝沙箱手机网站支付,即网页点击按钮发起支付,跳转到沙箱app付款 由于其他博客的流程大多笼统,有时候并不能找到正确的集成方式,本文尽可能详细的阐述付款,异 ...
- 开发嵌入京东app h5| Hybrid | 微信小程序 | 实践踩坑总结十六条
一 前言 笔者最近一直在开发京东app嵌入的h5项目和微信小程序商城项目,在此期间遇到很多坑.这篇文章主要是针对 h5| Hybrid | 微信小程序 三个方向来讲述我遇到的坑,以及详细讲解我是如何解 ...
- 企业微信自建集成应用——踩坑记录(二)
问题五 描述:在应用配置信息中,配置可信域名(可作为应用OAuth2.0网页授权功能的回调域名),同一个域名,明明之前都可以使用校验成功了,现在把文件放到服务器上还是校验失败 原因:由于之前使用的域名 ...
- php silk v3 decoder,微信小程序语音搜索踩坑:silk文件格式转换,在PHP中使用
直接调用微信小程序录音接口,然后上传到服务器,百度语音的接口是识别不了这种格式的文件,那么问题来了 一.如何转码?ffmpeg? 二.如何在PHP中使用? 本文将要解决这两个问题. 用到的第三方工具: ...
- vue开发微信公众号订阅消息踩坑记录
今天做了一个微信公众号的网页开发, 使用的是vue做的开发,没错,就是微信公众号的开发,这都2021年了, 还有人有开发微信公众号的需求,我也是晕了, 微信公众号是我开发中感觉,最难调试的开发工作,没 ...
- Android开发之App支付功能实现及踩坑
支付宝支付实现 1.正规支付实现 前提条件: 1. 企业或个体工商户可申请,且账号通过支付宝实名认证审核 2. 需提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致: 3. 提供APP名称或 ...
- 微信小程序生成分享图片踩坑大计划
微信小程序有个非常好的缺点,就是分享不能分享到朋友圈,怎么办呢,那只好生成图片,图片里面加个小程序码. 效果图 但不过其中有坑大家注意啦 HTML代码,我这个是不显示图片的生成图片,所以canvas设 ...
最新文章
- ASP.NET中使用多个runat=server form
- Parallel学习
- php中empty功能,在php中empty函数起什么作用呢?
- linux 安装jdk(install jdk)
- 绕月飞行维生系统进展如何?美国人准备好了吗
- 第11课:动手实战基于 LSTM 轻松生成各种古诗
- ASP.NET MVC SSO单点登录设计与实现
- C51编程在不同内存空间(data xdata bdata)定义变量的注意事项
- 【每日一题】4月1日题目 Rinne Loves Edges
- zeppelin连接数据源_使用开放源代码合同(open-zeppelin)创建以太坊令牌
- Android BitmapShader 实战 实现圆形、圆角图片
- Java-异常01 Error和Exception
- Hadoop学习笔记(一)从官网下载安装包
- zabbix通过UNIXODBC连接数据库
- 常用的测试用例设计方法有那些?
- VirtualBox安装增强功能实现全屏
- 整车CAN网络拓扑图
- android 图片编辑工具,照片编辑器:Photo Editor
- Linux(一):概述及环境搭建
- 【Fuzzy】隶属度函数和模糊推理