目录
官网文档:
一、SDK下载
下载语言对应的SDK - 这里我下载PHP
创建支付对象
二、SDK配置
1、将SDK完整文件放入项目 vendor 目录下(Demo中有参考文件,生产使用AdapaySdk目录)
2、修改如下两个配置文件
1)、在AdapaySdk/config/config.json中配置私钥公钥等信息(如果没有此目录就自行创建,也可从Demo中的复制过来)、在config.php中配置config.json文件路径如下:
AdapaySdk/config/config.json
{
"*************DO NOT CHANGE CONTENT*************": "",
"api_key_live": "api_live_换成你的真实参数",
"api_key_test": "api_test_换成你的真实参数",
"rsa_public_key": "公钥",
"*************DO NOT CHANGE CONTENT*************": "",
"rsa_private_key": "私钥"
}
AdapaySdk/config.php
AdapaySdk目录
三、SDK调用
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";
# 引用失败的话可以采用根路径格式如:"f:\\porject\\tp\\vendor\\sdk..\\config.php"
2、发起支付
public function launch_pay()
{
# 初始化支付类
$payment = new \AdaPaySdk\Payment();
# 自定义的订单号:这里我用time举例,你可以根据你的需要变更
$order_no = time();
# 付款金额保留两位数(这里需要注意就算是正数也需要保留两位小数)
$pay_amt = number_format("付款金额", 2);
# 付款人微信 open_id
$open_id = "这里要先通过微信获取 《付款人》 的openid";
# 发起之前建议在这里单独存储一下订单信息(如:订单号、金额、付款人openid、以及其他你需要的信息,方便后面使用)
# 支付设置
$payment_params = array(
# 引用枚举定义的app_id
"app_id" => '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()) {
# 失败处理
# 业务逻辑
return $payment->result;
} else {
# 成功处理_返回pay_info信息给前端
# 业务逻辑
# 这里很重要!! 需要将 pay_info 返回给前端采用jsapi调起微信支付
return $payment->result["expend"]["pay_info"];
}
}
四、异步通知回调
publi fucntion async(){
# 回调接收(接收回调要用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);
}
# 其他业务
}