热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php微信支付回调接口,php对接微信支付教程

本文目录一览:1、PHP调用微信支付接口?2、

本文目录一览:


  • 1、PHP调用微信支付接口?


  • 2、如何用PHP实现微信支付,求教。新手!说明详细点


  • 3、微信v3扫码支付二返回的notify.php怎么接收回调的值


  • 4、微信支付接口php版 notify_url.php 异步通知页面未成功执行是怎么回事?

PHP调用微信支付接口?

不一定,看你业务需要。这些步骤只是描述微信系统会发出和接收什么数据,商户需要发送和会接收到什么数据,用户需要执行什么操作。回调的URL是用来接收数据的,至于发送并没有要求。

如何用PHP实现微信支付,求教。新手!说明详细点

以PHP语言为例,对微信支付的开发流程进行一下说明:

1.获取订单信息。

2.根据订单信息和支付相关的账号生成sign,并且生成支付参数。

3.将支付参数信息POST到微信服务器,获取返回信息。

4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付。

微信v3扫码支付二返回的notify.php怎么接收回调的值

其实在写这篇文章的时候感觉自己已经落伍了,不过笔者在百度上搜索"微信支付开发之扫描支付(模式二)后如何回调"寻找答案时,发现依旧有很多朋友没有解决这个问题,所以就把自己的解决思路分享给大家。

一、下载微信支付SDK(笔者以php发开为例,sdk包为WxpayAPI_php_v3.zip)下载SDK包后解压,在解压目录下,我们会看到如下目录二、查阅微信支付开发者文档后得知,微信扫码支付的demo即为example目录下的native.php文件为了方便,我们要做的是将整个解压后的文件放入到本地环境的根目录下的wxpay(可随个人喜好命名)文件夹中三、以笔者为例,在浏览器中输入打开上面网址后,发现有两个二维码,如题,我们今天研究的是模式二扫码(官方也推荐模式二扫码支付)四、我们用手机登陆微信,扫描上面页面中的模式二的二维码,并且支付在这里我们发现一个有趣的问题,当你支付成功后,PC页面中并没有发生任何变化,所以我们考虑的主要问题是,支付后如何进行回调。

这里不说多的废话了,笔者参考了网上的诸多方法,总结如下:

1、删掉native.php文件中扫码模式一的一些html,只剩下扫码模式二的一些相关html代码。

2、由于官方文档中也说明了,扫码模式二的支付结果是异步响应,不会主动返回支付结果,所以我们采用了Javascript去时时监听支付结果,然后根据请求的结果,在做下一步的页面回调。笔者最终代码如下,有兴趣的朋友可以参考下:

native.php文件

1 ?php

2 ini_set('date.timezone','Asia/Shanghai');3 //error_reporting(E_ERROR);

4

5 require_once "../lib/WxPay.Api.php";

6 require_once "WxPay.NativePay.php";

7 require_once 'log.php';

8

9 //模式一

10 /**

11 * 流程:

12 * 1、组装包含支付信息的url,生成二维码13 * 2、用户扫描二维码,进行支付

14 * 3、确定支付之后,微信服务器会回调预先配置的回调地址,在【微信开放平台-微信支付-支付配置】中进行配置15 * 4、在接到回调通知之后,用户进行统一下单支付,并返回支付信息以完成支付(见:native_notify.php)16 * 5、支付完成之后,微信服务器会通知支付成功17 * 6、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)18 */

19 $notify = new NativePay();

20 $url1 = $notify-GetPrePayUrl("123456789");21

22 //模式二

23 /**

24 * 流程:

25 * 1、调用统一下单,取得code_url,生成二维码26 * 2、用户扫描二维码,进行支付

27 * 3、支付完成之后,微信服务器会通知支付成功28 * 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)29 */

30 $input = new WxPayUnifiedOrder();

31 $input-SetBody("1分钱购买何宁");

32 $input-SetAttach("1分钱购买何宁");

33 $num=WxPayConfig::MCHID.date("YmdHis");34 $input-SetOut_trade_no($num);

35 $input-SetTotal_fee("1");

36 $input-SetTime_start(date("YmdHis"));37 $input-SetTime_expire(date("YmdHis", time() + 600));38 $input-SetGoods_tag("test");

39 $input-SetNotify_url("");40 $input-SetTrade_type("NATIVE");

41 $input-SetProduct_id("123456789");

42 $result = $notify-GetPayUrl($input);

43 $url2 = $result["code_url"];

44 ?

45

46 html

47 head

48 meta http-equiv="content-type" cOntent="text/html;charset=utf-8"/

49 meta name="viewport" cOntent=" /

50 title微信支付样例/title

51 /head

52 body

53 div 扫描支付模式二/divbr/

54 img alt="模式二扫码支付" src="qrcode.php?data=?php echo urlencode($url2);?" /

55 div id="myDiv"/divdiv id="timer"0/div

56 script

57 //设置每隔1000毫秒执行一次load() 方法58 var myIntval=setInterval(function(){load()},1000);59 function load(){

60 document.getElementById("timer").innerHTML=parseInt(document.getElementById("timer").innerHTML)+1;61 var xmlhttp;

62 if (window.XMLHttpRequest){

63 // code for IE7+, Firefox, Chrome, Opera, Safari64 xmlhttp=new XMLHttpRequest();65 }else{

66 // code for IE6, IE5

67 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");68 }

69 xmlhttp.Onreadystatechange=function(){70 if (xmlhttp.readyState==4 xmlhttp.status==200){71 trade_state=xmlhttp.responseText;72 if(trade_state=='SUCCESS'){73 document.getElementById("myDiv").innerHTML='支付成功';74 //alert(transaction_id);75 //延迟3000毫秒执行tz() 方法76 clearInterval(myIntval);77 setTimeout("location.href='success.php'",3000);78

79 }else if(trade_state=='REFUND'){80 document.getElementById("myDiv").innerHTML='转入退款';81 clearInterval(myIntval);82 }else if(trade_state=='NOTPAY'){83 document.getElementById("myDiv").innerHTML='请扫码支付';84

85 }else if(trade_state=='CLOSED'){86 document.getElementById("myDiv").innerHTML='已关闭';87 clearInterval(myIntval);88 }else if(trade_state=='REVOKED'){89 document.getElementById("myDiv").innerHTML='已撤销';90 clearInterval(myIntval);91 }else if(trade_state=='USERPAYING'){92 document.getElementById("myDiv").innerHTML='用户支付中';93 }else if(trade_state=='PAYERROR'){94 document.getElementById("myDiv").innerHTML='支付失败';95 clearInterval(myIntval);96 }

97

98 }

99 }

100 //orderquery.php 文件返回订单状态,通过订单状态确定支付状态101 xmlhttp.open("POST","orderquery.php",false);102 //下面这句话必须有

103 //把标签/值对添加到要发送的头文件。

104 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");105 xmlhttp.send("out_trade_no=?php echo $num;?");106

107 }

108 /script

109

110 /body

111 /html

orderquery.php代码也做了相应调整:

?php

ini_set('date.timezone','Asia/Shanghai');error_reporting(E_ERROR);

require_once "../lib/WxPay.Api.php";

require_once 'log.php';

//初始化日志

$logHandler= new CLogFileHandler("./logs/".date('Y-m-d').'.log');$log = Log::Init($logHandler, 15);

function printf_info($data)

{

foreach($data as $key=$value){

echo "font color='#f00;'$key/font : $value br/";}

}

if(isset($_REQUEST["transaction_id"]) $_REQUEST["transaction_id"] != ""){$transaction_id = $_REQUEST["transaction_id"];$input = new WxPayOrderQuery();

$input-SetTransaction_id($transaction_id);//printf_info(WxPayApi::orderQuery($input));$result=WxPayApi::orderQuery($input);

echo $result['trade_state'];

exit();

}

if(isset($_REQUEST["out_trade_no"]) $_REQUEST["out_trade_no"] != ""){$out_trade_no = $_REQUEST["out_trade_no"];$input = new WxPayOrderQuery();

$input-SetOut_trade_no($out_trade_no);

//printf_info(WxPayApi::orderQuery($input));$result=WxPayApi::orderQuery($input);

echo $result['trade_state'];

exit();

}

?

新建success.php文件:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""

html xmlns=""

head

meta http-equiv="Content-Type" cOntent="text/html; charset=utf-8" /

title微信支付成功/title

/head

body

br /br /br /br /br /br /br /

h1微信支付成功/h1

/body

/html

微信支付接口php版 notify_url.php 异步通知页面未成功执行是怎么回事?

回调地址不可以带参数,只可以是

xxx.php,我做了很多项目的微信支付,一般都会回调,可能存在的问题是没有正确验证。

由于是微信服务器发起的请求,所以返回你是看不到的,只能使用file_put_contents写入文件,来一步一步测试到底在哪出了问题


推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
  • AngularJS 进阶指南:第三部分深入解析
    在本文中,我们将深入探讨 AngularJS 的指令模型,特别是 `ng-model` 指令。`ng-model` 指令用于将 HTML 元素与应用程序数据进行双向绑定,支持多种数据类型验证,如数字、电子邮件地址和必填项检查。此外,我们还将介绍如何利用该指令优化表单验证和数据处理流程,提升开发效率和用户体验。 ... [详细]
  • 在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
author-avatar
aaaaaaaaaaa530_552
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有