微信小程序支付 后台处理逻辑 (转)
<?php
namespace app\parent\controller;
use think\Request;
class Wxpay
{
function wechat(){ //微信配置信息和初始逻辑
$openid =Request::instance()->param('openid');
$out_trade_no =Request::instance()->param('out_trade_no');
$total_fee =Request::instance()->param('total_fee');
$appid = "*******";
$body = mb_convert_encoding("订单详情","utf-8","gbk"); //商品描述
$mch_id = "*******"; //商户号
$nonce_str = $this->getNonceStr(); //随机字符
$notify_url = *******'; //回调地址
$openid = $openid;/*"o-E0L0X-hr-kXdHVrLwjzxF--sE4";*/ //openid
$out_trade_no = $out_trade_no; //商户订单编号
$ip = request()->ip(); //ip
$total_fee = $total_fee; //支付金额 分
$key = "*******";
$param = $this->signature($appid,$body,$mch_id,$nonce_str,$notify_url,$openid,$out_trade_no,$ip,$total_fee,$key);
//发起请求
$xml = $this->post_curl("https://api.mch.weixin.qq.com/pay/unifiedorder",$param); //发起请求
//数据结果解析
$info = json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);
$prepay_id = $info['prepay_id'];
$noncestr = $info['nonce_str'];
$timestamp = time();
$SignA = strtoupper(md5("appid=$appid&noncestr=$noncestr&package=Sign=WXPay&partnerid=$mch_id&prepayid=$prepay_id×tamp=$timestamp&key=$key"));
$info['sign'] = $SignA;
$info['timestamp'] = $timestamp;
return json_decode($info);
}
private function signature($appid,$body,$mch_id,$nonce_str,$notify_url,$openid,$out_trade_no,$ip,$total_fee,$key){ //清新支付请求数据组装
$stringA = "appid=$appid&body=$body&mch_id=$mch_id&nonce_str=$nonce_str¬ify_url=$notify_url&openid=$openid&out_trade_no=$out_trade_no&spbill_create_ip=$ip&total_fee=$total_fee&trade_type=JSAPI";
$stringSignTemp = $stringA."&key=$key";
$sign = strtoupper(md5($stringSignTemp));
$param = "<xml>\n";
$param .= "<appid>{$appid}</appid>\n";
$param .= "<body>{$body}</body>\n";
$param .= "<mch_id>{$mch_id}</mch_id>\n";
$param .= "<nonce_str>{$nonce_str}</nonce_str>\n";
$param .= "<notify_url>{$notify_url}</notify_url>\n";
$param .= "<openid>{$openid}</openid>\n";
$param .= "<out_trade_no>{$out_trade_no}</out_trade_no>\n";
$param .= "<spbill_create_ip>{$ip}</spbill_create_ip>\n";
$param .= "<total_fee>{$total_fee}</total_fee>\n";
$param .= "<trade_type>JSAPI</trade_type>\n";
$param .= "<sign>{$sign}</sign>\n";
$param .= "</xml>";
return $param;
}
/**
* 产生随机字符串,不长于32位
* @param int $length
* @return 产生的随机字符串
*/
private function getNonceStr($length = 32)
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
private function post_curl($url,$data,$agreement = 0){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
if($agreement == 0){//0 https 1 http
unset($_REQUEST['agreement']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
}
转载自:https://blog.csdn.net/qq_34629975/article/details/72420411
微信小程序支付 后台处理逻辑 (转)的更多相关文章
- 微信小程序支付及退款流程详解
微信小程序的支付和退款流程 近期在做微信小程序时,涉及到了小程序的支付和退款流程,所以也大概的将这方面的东西看了一个遍,就在这篇博客里总结一下. 首先说明一下,微信小程序支付的主要逻辑集中在后端,前端 ...
- 微信小程序支付接入注意点
一.微信支付后台服务器部署 服务器采用ubuntu16.04 + php7.0 + apache2.0. 微信支付后台服务使用了curl 和 samplexml ,因此php.ini配置中必须开启这两 ...
- .Net后台实现微信小程序支付
最近一直再研究微信支付和支付宝支付,官方支付文档中一直在讲与第三方支付打交道的原理,却没有介绍我们自己项目中的APP与后台该怎么交互(哈哈,人家也没必要介绍这一块).拜读了官方文档和前辈们的佳作,自己 ...
- 【原创】微信小程序支付java后台案例(公众号支付同适用)(签名错误问题)
前言 1.微信小程序支付官方接口文档:[点击查看微信开放平台api开发文档]2.遇到的坑:预支付统一下单签名结果返回[签名错误]失败,建议用官方[签名验证工具]检查签名是否存在问题.3.遇到的坑:签名 ...
- 微信小程序支付源码,后台服务端代码
作者:尹华南,来自原文地址 微信小程序支付绕坑指南 步骤 A:小程序向服务端发送商品详情.金额.openid B:服务端向微信统一下单 C:服务器收到返回信息二次签名发回给小程序 D:小程序发起支付 ...
- SpringBoot2.0微信小程序支付多次回调问题
SpringBoot2.0微信小程序支付多次回调问题 WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等微信功能的后端开发. ...
- .NET Core 微信小程序支付——(统一下单)
最近公司研发了几个电商小程序,还有一个核心的电商直播,只要是电商一般都会涉及到交易信息,离不开支付系统,这里我们统一实现小程序的支付流程(与服务号实现步骤一样). 目录1.开通小程序的支付能力2.商户 ...
- 微信小程序支付功能 C# .NET开发
微信小程序支付功能的开发的时候坑比较多,不过对于钱的事谨慎也是好事.网上关于小程序支付的实例很多,但是大多多少有些问题,C#开发的更少.此篇文档的目的是讲开发过程中遇到的问题做一个备注,也方便其他开发 ...
- php对接微信小程序支付
前言:这里我就假装你已经注册了微信小程序,并且基本的配置都已经好了.注: 个人注册小程序不支持微信支付,所以我还是假装你是企业或者个体工商户的微信小程序,其他的商户号注册,二者绑定,授权,支付开通,就 ...
随机推荐
- 只需5分钟!一文读懂CSS布局(二) -- flex布局
目录 简介 基本概念 容器属性 1. flex-direction 测试代码 2. flex-wrap 3. flex-flow 4. justify-content 5. align-items 6 ...
- springboot项目添加swagger2
1.pom中添加swagger依赖 <!-- swagger-ui --> <dependency> <groupId>io.springfox</group ...
- CVPR2020:利用图像投票增强点云中的三维目标检测(ImVoteNet)
CVPR2020:利用图像投票增强点云中的三维目标检测(ImVoteNet) ImVoteNet: Boosting 3D Object Detection in Point Clouds With ...
- 使用allure工具生成测试报告(基于pytest框架)
一.allure简介:一个轻量级的,灵活的,支持多语言,多平台的开源report框架 Allure基于标准的xUnit结果输出,但是添加了一些补充数据.任何报告都是通过两个步骤生成的.在测试执行期间( ...
- 使用fiddler工具模拟弱网环境
1.使用CTRL+R快捷键调出设置窗口 2.CTRL+F搜索"if (m_SimulateModem)",如下图 3.设置 // 这里修改每KB上传时候的延迟速度,以ms为单位 ...
- 【NX二次开发】PMI线性标注
PMI线性标注,二次开发的难点在于控制尺寸的位置,多花点儿时间都能搞出来,想走捷径最下面就是源码. 只需要摆好工作坐标,然后指定你要标注尺寸的两个点,就可以很方便得利用这个封装函数做出你想要的PMI. ...
- 【MySQL】MySQL Workbench 8.0 CE 界面汉化
汉化前: 找到这个文件: 打开文件,复制下面这段替换进去保存,重新打开软件即可:(*改之前备份一下) <?xml version="1.0"?> <data> ...
- Quill基本使用和配置 - DevUI
DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工具类产 ...
- Kubernetes集群安装
一.环境介绍 主机名 IP地址 master 192.168.0.100 node1 192.168.0.101 node2 192.168.0.102 1.1.操作系统: CensOS8.4.210 ...
- js中有对象的key怎么获取对应的值
一般人的思路是这样的 var obj = {"name1":"张三","name2":"李四"}; var key = ...