PHP 实现汇聚adapay调用微信支付
目录
前言
一、下载SDK
二、配置
三、实际操作
1.引入SDK
2.代码参考
四、回调
总结
前言
先整理一下调起微信支付的流程:
Adapay成功发起支付请求 -> 将请求成功中的 pay_info 返回给前端-> 前端使用 pay_info 调用微信
官网文档:
帮助开发者了解所有技术对接参数和请求_开发者_Adapay
一、下载SDK
找到你对应的语言下载SDK:这里我下载PHP
帮助开发者了解所有技术对接参数和请求_开发者_Adapay
创建支付对象:
帮助开发者了解所有技术对接参数和请求_开发者_Adapay
二、配置
完整文件:所有方法都在Adapay下(Demo文件中有参考示例)
我们要使用的重要文件:
Payment.php:
发起支付的方法
config.php:
配置文件,引入参数文件(根据你自己的参数文件调整路径)
config/config.php :
这个文件是存放【api_key_live、api_key_live、rsa_public_key、rsa_private_key 】这几个重要参数。需要自己新建或者或则直接从Demo中复制到Adapay中然后进行修改
# 将以下四个参数替换成你自己真实的
{"*************DO NOT CHANGE CONTENT*************": "","api_key_live": "api_live_真实参数","api_key_test": "api_test_真是参数","rsa_public_key": "公钥","*************DO NOT CHANGE CONTENT*************": "","rsa_private_key": "私钥"
}
三、实际操作
1.引入SDK
# 加载基础 adapay 基础类# SDK 初始化文件加载
include_once dirname(__FILE__) . "../../../../vendor/adapay_sdk_php/adapay_sdk_php_v1.4.4/AdapaySdk/init.php";# 在文件中设置 DEBUG 为 true 时, 则可以打印日志到指定的日志目录下 LOG_DIR
include_once dirname(__FILE__) . "../../../../vendor/adapay_sdk_php/adapay_sdk_php_v1.4.4/AdapaySdk/config.php";
定义app_id:
2.代码参考
public function launch_pay(){# 初始化支付类$payment = new \AdaPaySdk\Payment();# 自定义的订单号:这里我用time举例,你可以根据你的需要变更$order_no = date("YmdHis") . rand(100000, 999999);# 付款金额保留两位数(这里需要注意就算是正数也需要保留两位小数)$pay_amt = number_format("付款金额", 2);# 付款人微信 open_id$open_id = "这里要先通过微信获取 《付款人》 的openid";# 发起之前建议在这里单独存储一下订单信息(如:订单号、金额、付款人openid、以及其他你需要的信息,方便后面使用)# 支付设置$payment_params = array(# 引用枚举定义的app_id"app_id" => test::app_id,# 订单号"order_no" => $order_no,# 支付渠道(官网文档有说明,根据实际来选择(这里我测试用公众号)) "pay_channel" => "wx_pub",# 商品_付款总金额 "pay_amt" => $pay_amt,# 商品_标题 "goods_title" => "测试商品",# 商品_描述 "goods_desc" => "body",# 通知回调地址"notify_url" => "http://域名(或ip)/这里放你接收回调的方法路径",# (微信)付款人open_id "expend" => ["open_id" => $open_id ]);# 发起支付$payment->create($payment_params);# 对支付结果进行处理(可以在这一步将成功失败信息存储起来)if ($payment->isError()) {# 失败处理$aData = ["app_id" => $payment->result["app_id"],"error_code" => $payment->result["error_code"],"error_msg" => $payment->result["error_msg"],"error_type" => $payment->result["error_type"],"order_no" => $payment->result["order_no"],"pay_amt" => $payment->result["pay_amt"],"pay_channel" => $payment->result["pay_channel"],"status" => $payment->result["status"],];Db::table("日志表名")->insert($aData);return $payment->result;} else {$aData = ["request_id" => $payment->result["id"],"created_time" => $payment->result["created_time"],"order_no" => $payment->result["order_no"],"prod_mode" => $payment->result["prod_mode"],"app_id" => $payment->result["app_id"],"pay_channel" => $payment->result["pay_channel"],"pay_amt" => $payment->result["pay_amt"],"query_url" => $payment->result["query_url"],"status" => $payment->result["status"],"expend" => $payment->result["expend"]["pay_info"],];# 成功处理_返回pay_info信息给前端Db::table("日志表名")->insert($aData);# 这里很重要!! 需要将 pay_info 返回给前端取调起微信支付return $payment->result["expend"]["pay_info"];}}
四、回调
# 回调接收(接收回调要用post方式)$post_data = json_decode($_POST["data"], 1);switch ($post_data["status"]) {case "succeeded":# 回调成功# 这里建议在发起支付之前存储一下订单信息(在回调成功之后使用订单号作为查询条件)$exist = Db::table("支付成功表")->where("order_no", $post_data["order_no"])->find();# 如果已经存储过就不再存储了(因为Adapay的回调基本上会发送四次过来,为了避免重复的存储所以在这里规避一下)if (!empty($exist) || $exist !== false || $exist != null) {break;}$aData = [# 官方返回数据id "request_id" => $post_data["id"],# 时间"created_time" => $post_data["created_time"],# 订单号"order_no" => $post_data["order_no"],# app_id"app_id" => $post_data["app_id"],# 支付渠道"pay_channel" => $post_data["pay_channel"],# 付款金额"pay_amt" => $post_data["pay_amt"],# 手续费"fee_amt" => $post_data["fee_amt"],# 状态"status" => $post_data["status"],# openid"sub_open_id" => $post_data["expend"]["sub_open_id"]];Db::table("成功表")->insert($aData);unset($aData);break;default:# 回调失败return \json_data(0, "回调错误", $post_data);}# 其他业务
总结
支付到这里就结束了,代码中有些自身数据要根据你的实际情况来修正哦!
下一篇准备分享一下使用Adapay实现商家分账的功能,看大家有没有需求
PHP 实现汇聚adapay调用微信支付相关推荐
- 微信公众号页面支付接口java,[Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付...
[Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付 0 2015-09-15 15:00:30 一.调用微信的JS文件 1.首先要绑定[JS接口安全域名],"公众号设置&q ...
- 调用微信支付接口总结
项目里面用到了微信支付的功能,照着文档学习了一下,这里做个总结来记录.项目用到的是anglusJS来做前端开发,我这边简化了,用的ajax进行异步的调用,然后业务也直接写在了控制层(不过不应该 ...
- H5页面调用微信支付
1.H5页面使用微信支付,首先需要注册微信公众号,在设置与开发>公众号设置>功能设置中配置业务域名.JS接口安全域名.网页授权域名.支付功能页面需在此域名链接下的页面. 2.加入域名后,就 ...
- php 调用微信支付的时间戳,前端调用微信支付接口
支付按钮的点击事件$(´.Save_Patient_Msg´).click(function(){ $(´.Save_Patient_Msg´).off(´click´); var hrdfId = ...
- ios调用微信支付提示当前页面的URL未注册
ios调用JSAPI微信支付提示"当前页面的URL未注册",而页面手动刷新后再次支付则正常,安卓也正常,肯定不是授权目录配置问题. 在微信支付页面,当通过JSAPI微信支付 ...
- 关于IOS调用微信支付jsapi不起作用的解决方法
关于IOS调用微信支付jsapi不起作用的解决方法 参考文章: (1)关于IOS调用微信支付jsapi不起作用的解决方法 (2)https://www.cnblogs.com/randy619/p/5 ...
- 移动端页面调用微信支付
1.话不对说,先来个小漩涡 2.步骤: (1)第一个接口 创建订单号,并且后端携带电子签名 (2)第二个接口 通过后端返回信息,调用微信支付接口callpay方法 3,上代码 //创建订单,做了一些接 ...
- 小程序开发调用微信支付以及微信回调地址配置
首先观看微信提供的文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1 清楚调用微信支付必 ...
- android kotlin webview内H5调用微信支付问题
问题 商家参数格式有误,请联系商家解决 微信文档描述 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4 解决方法 文档说明白了,要在 ...
最新文章
- 新进展!英伟达用 AI 给纪录片配音,情绪语调拿捏得稳稳地
- 顾险峰: 庞加莱猜测的证明和应用
- SAP R3 FI 上线 顾问设置教程(一)
- 金融领域下的数据挖掘算法应用:智能推荐算法模型
- 使用CEfSharp 下载文件 弹出保存框 IDownloadHandler
- CommonJS概述及使用
- JavaScript通过 new FileReader() 获取图片base64 无组件上传图片
- 一步步编写操作系统 61 任务状态段 TSS
- 第四版源码技术导航网自适应
- OpenCV之图像的运算(笔记05)
- 收集一些常用的CDN链接!无需下载快速使用!
- mate30pro鸿蒙系统刷机包下载,华为 Mate 30 Pro 的鸿蒙 2.0 Beta 版刷机包流出(附下载地址)...
- java autorun_玩转Autorun.inf
- 修改蒙特卡洛树搜索让人工智能像人类一样玩视频游戏
- 车性能测试软件是什么,3DMark制造商推首款汽车性能测试软件
- 视觉工程师出差过多必会出现的问题
- filecoin benchmarks v25 GeForce GTX 1080 Ti
- DCMM认证评估机构,你都知道吗?
- ubuntu不支持安装搜狗_ubuntu搜狗输入法安装失败,导致无法进入桌面
- 机器学习面试1000题 1 - 255
热门文章
- 4G无线模块 电力通信模块
- 公司金融01.现值与贴现
- SL651-2014 《水文监测数据通信规约》 中心站查询遥测站实时数据详解
- 怎样训练左右手协调_学钢琴左右手不协调怎么办?几个小技巧拿走不谢
- Android 学习之那些年我们遇到的BUG1:This view is not constrained, it only has designtime positions
- 解决for循环有时只输出最后一个结果
- 中职计算机应用专业课堂教学,谈谈中职计算机应用基础课程教学中翻转课堂研究...
- Biopython操作DNA,RNA和蛋白质序列
- java熔断技术_Hystrix熔断器技术解析-HystrixCircuitBreaker
- python格式化字符串 时间戳 转 UTC(2023-01-11T16:00:00Z)格式时间