PHP 实现汇聚adapay调用微信支付
目录
前言
先整理一下调起微信支付的流程:
Adapay成功发起支付请求 -> 将请求成功中的 pay_info 返回给前端-> 前端使用 pay_info 调用微信
官网文档:
一、下载SDK
找到你对应的语言下载SDK:这里我下载PHP
创建支付对象:
二、配置
完整文件:所有方法都在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实现商家分账的功能,看大家有没有需求
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfbkkh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01