微信支付api的服务器上,服务器微信支付接口笔记(与app端对接)

到这里,准备工作就算完成了。

支付流程步骤详解:

步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。

这一步,app将相关订单信息提交给商户

步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。

商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付。

步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay

步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】(与服务器接口无关)

步骤5:商户后台接收支付通知。api参见【支付结果通知API】

步骤6:商户后台查询支付结果。,api参见【查询订单API】

遇到的问题:

1 商户用于接收微信的支付通知,链接是通过【统一下单API】中提交的参数notify_url设置,如果链接无法访问,商户将无法接收到微信通知,不能带参数,微信返回类型为post,xml格式

2 接收到支付通知首先要做签名验证,防止数据泄漏导致出现“假通知”,造成资金损失,就是收到的参数,除了sign字段之外的字段做签名之后,与收到的sign比较。

3 处理重复问题,微信可能会多次返回信息,要处理重复订单的问题,主要是解决【统一下单API】的订单号

4 另外,5里面要对6进行验证,验证无误,才可以在商户端对订单支付状态进行修改,防止假通知,或误操作。

上代码:(步骤5,6的)<>

/**

* 通用通知接口demo

* ====================================================

* 支付完成后,微信会把相关支付和用户信息发送到商户设定的通知URL,

* 商户接收回调信息后,根据需要设定相应的处理流程。

*

* 这里举例使用log文件形式记录回调信息。

*/

require_once dirname(__FILE__).'/log_.php';

// include_once('./log_.php');

require_once '/xxxxxx.php';

// include_once('../xxxxxx.php');

//使用通用通知接口

$notify = new Notify_pub();

//存储微信的回调

$xml = $GLOBALS['HTTP_RAW_POST_DATA'];

$notify->saveData($xml);//将微信的请求xml转换成关联数组,以方便数据处理

if (empty($data))

return false;

//验证签名,并回应微信。

//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,

//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,

//尽可能提高通知的成功率,但微信不保证通知最终能成功。

if($notify->checkSign() == FALSE){

//设置两个数组的字段值

$notify->setReturnParameter('return_code','FAIL');//返回状态码

$notify->setReturnParameter('return_msg','签名失败');//返回信息

}else{

$notify->setReturnParameter('return_code','SUCCESS');//设置返回码

}

$returnXml = $notify->returnXml();

echo $returnXml;

//==商户根据实际情况设置相应的处理流程,此处仅作举例=======

//以log文件形式记录回调信息

$log_ = new Log_();

$log_name=dirname(__FILE__)'/notify_url.log';//log文件路径

$log_->log_result($log_name,'【接收到的notify通知】:\n'.$xml.'\n');

if($notify->checkSign() == TRUE)

{

if ($notify->data['return_code'] == 'FAIL'||empty($notify->data['return_code'])) {

//此处应该更新一下订单状态,商户自行增删操作

$log_->log_result($log_name,'【通信出错】:\n'.$xml.'\n');

}

elseif($notify->data['result_code'] == 'FAIL'||empty($notify->data['result_code'])){

//此处应该更新一下订单状态,商户自行增删操作

$log_->log_result($log_name,'【业务出错】:\n'.$xml.'\n');

}

else{

$check = new OrderQuery_pub();

if(!$check->createXml()){

$msg = '订单查询失败';

$log_->log_result($log_name,'订单查询失败:\n'.time().'\n');

return false;

}

// if (empty($data['out_trade_no'])){

// // file_put_contents('/xxxxx/aaa.txt', '3');

// return false;

// }

ksort($data);

reset($data);

$payment = D('Payment')->getPayment('weixin');

/* 检查支付的金额是否相符 */

//商户逻辑

}

//签名验证

$sign = array();

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

if ($key != 'sign') {

$sign[] = $key . '=' . $val;

}

}

$sign[] = 'key=' . $payment['appkey'];

//用&将sign元素拼接成字串

$signstr = strtoupper(md5(join('&', $sign)));

if ($signstr != $data['sign']){

$log_->log_result($log_name,'【签名失败】:\n''用于组件sign的数组为:='.$sign.'\n');

return false;

}

//商户,对订单操作

echo 'SUCCESS';

$log_->log_result($log_name,'【支付成功】:\n'.$xml.time().'\n');

die();

}

//商户自行增加处理流程,

//例如:更新订单状态

//例如:数据库操作

//例如:推送支付完成信息

}

?>

如果你觉得有用的话,顶一下吧 ! ^o^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python写sql语句_Python操作文件模拟SQL语句功能

一、需求 当然此表你在文件存储时可以这样表示 1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件&#xff0c;实现增删改查操作 1. 可进行模糊查询&#xff0c;语法至少支持下面3种: 1. select name,age from staff_table where age > 22 2. select * from…

Maven的maven-clean-plugin插件详解

maven-clean-plugin 插件对应的命令是 mvn clean&#xff0c;执行 mvn clean 命令会删除构建输出目录 target。 打开命令终端&#xff0c;切换到 pom.xml 所在目录下&#xff0c;执行下面的命令&#xff1a; [~/documents/IdeaProjects/demo02]$ mvn clean [INFO] Scanning f…

jep290涉及jdk版本_JDK 12 – JEP 325开关表达式

jep290涉及jdk版本JDK 12已于2019年3月19 日上线GA&#xff0c;继续致力于缩短发布周期和频繁发布。 该版本的功能部分可以在这里找到。 对于开发人员来说&#xff0c;有趣的功能之一是“ JEP 325开关表达式 ”&#xff0c;它可以作为预览功能使用。 此处定义的预览功能是&…

笑傲江湖客户端服务器地址修改,《笑傲江湖》改键调整操作手把手教你玩笑傲...

《笑傲江湖》采用全新引擎AngelicaIII打造&#xff0c;秉承原著武侠精髓&#xff0c;首推新派动作武侠网游概念——融入动作及格斗游戏要素&#xff0c;强调真实的打击感与流畅的动作连贯度&#xff0c;并运用方向判定、位移闪避、移动战斗、攻防一体等多重技术手段&#xff0c…

Maven的maven-compiler-plugin插件详解

文章目录mvn compilemvn test-compile编译插件的配置mvn compile mvn compile 命令会将 src/main/resources 下的资源文件复制到编译输出目录下&#xff1b;接着会将 src/main/java 目录下源代码编译输出到编译输出目录下。编译输出目录默认是 target/classes 目录。 打开命令…

python数据处理常用函数_pytorch中的自定义数据处理详解

pytorch在数据中采用Dataset的数据保存方式&#xff0c;需要继承data.Dataset类&#xff0c;如果需要自己处理数据的话&#xff0c;需要实现两个基本方法。 &#xff1a;.getitem:返回一条数据或者一个样本&#xff0c;obj[index] obj.getitem(index). :.len:返回样本的数量 。…

raid重构原理_5个重构原理示例

raid重构原理这篇文章介绍了重构真正的开源代码&#xff08; Gradle Modules Plugin &#xff09;时应用的五​​种&#xff08;最著名的&#xff09;重构原理。 语境 当我为Gradle Modules Plugin &#xff08;PR &#xff03;73 &#xff09; 单独编译 module-info.java &am…

extjs ajax 遮罩层,[Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏

前言Load Mask(遮罩)效果&#xff0c;就是在页面还没有完全显示出来之前&#xff0c; 加上一个转装转的效果。类似&#xff1a;添加这样的效果有两个好处&#xff1a;1. 在页面没完全show出来之前&#xff0c; 把后面的页面给遮罩起来&#xff0c; 防止进行一些非法的操作。2. …

macOS下卸载文件系统_卸载移动硬盘_卸载U盘_推出移动硬盘_推出U盘

先使用命令 df -lh 在终端查看当前系统的所有挂载的文件系统&#xff08;系统硬盘、移动硬盘、U盘等&#xff09;&#xff0c;命令如下&#xff1a; liaowenxiongliaowenxiongdeMacBook-Air ~ % df -h Filesystem Size Used Avail Capacity iused ifree %iused …

python isalnum函数_Python 字符串 (isdigit, isalnum,isnumeric)转

Python isdigit() 方法检测字符串是否只由数字组成。 语法 isdigit()方法语法&#xff1a; str.isdigit() 参数 无。 返回值 如果字符串只包含数字则返回 True 否则返回 False。 Python isdecimal() 方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。 注意:定…

zing jvm_Zing加快了JVM应用程序的预热

zing jvmJava虚拟机&#xff08;JVM&#xff09;提供了托管运行时环境&#xff0c;用于安全部署应用程序&#xff0c;其性能通常可以超过本机编译语言&#xff08;如C和C &#xff09;。 通过即时&#xff08;JIT&#xff09;编译进行垃圾回收和自适应编译的内存管理是两个最突…

黎明觉醒测试服服务器维护怎么办,黎明觉醒测试资格进不去怎么办

黎明觉醒测试资格进不去怎么办&#xff1f;黎明觉醒游戏在在9月16日迎来曙光测试&#xff0c;相信不少玩家都去玩了发现自己进不去游戏&#xff0c;这是怎么回事呢&#xff1f;和小编一起来看看吧。黎明觉醒测试资格进不去怎么办一、测试资格进不去获得测试资格的玩家官方已提前…

查看Linux命令_搜索Linux命令_查找Linux命令

站点1&#xff1a;https://tool.lu/command/ 站点2&#xff1a;https://www.linuxcool.com/

蜂鸣器音乐代码 天空之城_潮玩 | 艺术展览,乐队live现场,网红小黑泥,贩卖“美好”的市集……一场未来公共生活,天空之城和你一起探索!...

第一次打卡这样的新媒体艺术作品&#xff0c;不是画作&#xff0c;也不是艺术品陈列&#xff0c;而是一场看的见的引力交响曲~错落的磁场具象成看得见的流动痕迹&#xff0c;不动声响却震撼的感官体验。很容易让人沉浸其中&#xff0c;去捕捉流动的方向和瞬间。虽然UFO是没看到…

自动部署 管道 ci cd_自动化测试在CI CD管道中的作用

自动部署 管道 ci cd业界广泛采用的软件开发实践&#xff1a;持续集成和持续部署可确保良好地交付产品并经常交付。 常规代码提交需要常规/连续测试&#xff0c;而如果忽略它&#xff0c;则可能导致非弹性基础结构。 如何交付坚固的CI CD管道&#xff1f; 对于许多公司来说&…

Maven的maven-install-plugin插件详解

文章目录将下载到本地的jar文件安装到Maven本地仓库中将当前项目安装到Maven本地仓库中参考maven-install-plugin 插件的作用&#xff1a;1.可以将当前项目安装到 Maven 本地仓库&#xff0c;供本地其它 Maven 项目使用 执行 mvn install 命令将当前项目安装到 Maven 本地仓库…

python字典_Python 字典

1、什么是 dict(字典)上一章节&#xff0c;我们学习了列表(List) 和 元组(tuple) 来表示有序集合。而我们在讲列表(list)的时候&#xff0c;我们用了列表(list) 来存储用户的姓名。name [一点水, 两点水, 三点水, 四点水, 五点水]那么如果我们为了方便联系这些童鞋&#xff0c…

hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力

hazelcast如果要使用Hazelcast内存数据网格&#xff08;IMDG&#xff09;来加快数据库应用程序的速度&#xff0c;但是要处理数百个表怎么办&#xff1f; 手动编码所有Java POJO和序列化支持将需要数周的工作&#xff0c;完成后&#xff0c;手动维护该域模型将很快成为一场噩梦…

Maven的maven-help-plugin插件详解

执行下面的命令查看指定插件的详细信息&#xff1a; [~/Documents/IdeaProjects/demo02]$ mvn help:describe -Dpluginorg.apache.maven.plugins:maven-site-plugin:3.9.0 -Ddetail上述命令执行的是 maven-help-plugin 的 describe 目标&#xff0c;在参数 plugin 中输入需要描…

android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...

点击 机器学习算法与Python学习 &#xff0c;选择加星标精彩内容不迷路本文转自机器之心在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy&#xff0c;已经有了非常之系统的中文文档&#xff0c;回想起当初细啃 NumPy 之时&#xff0c;不少人不得不徘徊于各大搜索引擎及…