• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

PHP 实现汇聚adapay调用微信支付

武飞扬头像
有只猫吃很多
帮助1

目录

前言

一、下载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中然后进行修改

  1.  
    # 将以下四个参数替换成你自己真实的
  2.  
    {
  3.  
    "*************DO NOT CHANGE CONTENT*************": "",
  4.  
    "api_key_live": "api_live_真实参数",
  5.  
    "api_key_test": "api_test_真是参数",
  6.  
    "rsa_public_key": "公钥",
  7.  
    "*************DO NOT CHANGE CONTENT*************": "",
  8.  
    "rsa_private_key": "私钥"
  9.  
    }

三、实际操作

1.引入SDK

  1.  
    # 加载基础 adapay 基础类
  2.  
     
  3.  
    # SDK 初始化文件加载
  4.  
    include_once dirname(__FILE__) . "../../../../vendor/adapay_sdk_php/adapay_sdk_php_v1.4.4/AdapaySdk/init.php";
  5.  
     
  6.  
    # 在文件中设置 DEBUG 为 true 时, 则可以打印日志到指定的日志目录下 LOG_DIR
  7.  
    include_once dirname(__FILE__) . "../../../../vendor/adapay_sdk_php/adapay_sdk_php_v1.4.4/AdapaySdk/config.php";

 定义app_id:

学新通

2.代码参考

  1.  
    public function launch_pay()
  2.  
    {
  3.  
    # 初始化支付类
  4.  
    $payment = new \AdaPaySdk\Payment();
  5.  
     
  6.  
    # 自定义的订单号:这里我用time举例,你可以根据你的需要变更
  7.  
    $order_no = date("YmdHis") . rand(100000, 999999);
  8.  
     
  9.  
    # 付款金额保留两位数(这里需要注意就算是正数也需要保留两位小数)
  10.  
    $pay_amt = number_format("付款金额", 2);
  11.  
     
  12.  
    # 付款人微信 open_id
  13.  
    $open_id = "这里要先通过微信获取 《付款人》 的openid";
  14.  
     
  15.  
    # 发起之前建议在这里单独存储一下订单信息(如:订单号、金额、付款人openid、以及其他你需要的信息,方便后面使用)
  16.  
     
  17.  
    # 支付设置
  18.  
    $payment_params = array(
  19.  
    # 引用枚举定义的app_id
  20.  
    "app_id" => test::app_id,
  21.  
    # 订单号
  22.  
    "order_no" => $order_no,
  23.  
    # 支付渠道(官网文档有说明,根据实际来选择(这里我测试用公众号))
  24.  
    "pay_channel" => "wx_pub",
  25.  
    # 商品_付款总金额
  26.  
    "pay_amt" => $pay_amt,
  27.  
    # 商品_标题
  28.  
    "goods_title" => "测试商品",
  29.  
    # 商品_描述
  30.  
    "goods_desc" => "body",
  31.  
    # 通知回调地址
  32.  
    "notify_url" => "http://域名(或ip)/这里放你接收回调的方法路径",
  33.  
    # (微信)付款人open_id
  34.  
    "expend" => [
  35.  
    "open_id" => $open_id
  36.  
    ]
  37.  
    );
  38.  
    # 发起支付
  39.  
    $payment->create($payment_params);
  40.  
     
  41.  
    # 对支付结果进行处理(可以在这一步将成功失败信息存储起来)
  42.  
    if ($payment->isError()) {
  43.  
    # 失败处理
  44.  
    $aData = [
  45.  
    "app_id" => $payment->result["app_id"],
  46.  
    "error_code" => $payment->result["error_code"],
  47.  
    "error_msg" => $payment->result["error_msg"],
  48.  
    "error_type" => $payment->result["error_type"],
  49.  
    "order_no" => $payment->result["order_no"],
  50.  
    "pay_amt" => $payment->result["pay_amt"],
  51.  
    "pay_channel" => $payment->result["pay_channel"],
  52.  
    "status" => $payment->result["status"],
  53.  
    ];
  54.  
    Db::table("日志表名")->insert($aData);
  55.  
    return $payment->result;
  56.  
    } else {
  57.  
    $aData = [
  58.  
    "request_id" => $payment->result["id"],
  59.  
    "created_time" => $payment->result["created_time"],
  60.  
    "order_no" => $payment->result["order_no"],
  61.  
    "prod_mode" => $payment->result["prod_mode"],
  62.  
    "app_id" => $payment->result["app_id"],
  63.  
    "pay_channel" => $payment->result["pay_channel"],
  64.  
    "pay_amt" => $payment->result["pay_amt"],
  65.  
    "query_url" => $payment->result["query_url"],
  66.  
    "status" => $payment->result["status"],
  67.  
    "expend" => $payment->result["expend"]["pay_info"],
  68.  
    ];
  69.  
    # 成功处理_返回pay_info信息给前端
  70.  
    Db::table("日志表名")->insert($aData);
  71.  
     
  72.  
    # 这里很重要!! 需要将 pay_info 返回给前端取调起微信支付
  73.  
    return $payment->result["expend"]["pay_info"];
  74.  
    }
  75.  
    }
学新通

四、回调

  1.  
    # 回调接收(接收回调要用post方式)
  2.  
    $post_data = json_decode($_POST["data"], 1);
  3.  
     
  4.  
    switch ($post_data["status"]) {
  5.  
    case "succeeded":
  6.  
    # 回调成功
  7.  
     
  8.  
    # 这里建议在发起支付之前存储一下订单信息(在回调成功之后使用订单号作为查询条件)
  9.  
    $exist = Db::table("支付成功表")->where("order_no", $post_data["order_no"])->find();
  10.  
    # 如果已经存储过就不再存储了(因为Adapay的回调基本上会发送四次过来,为了避免重复的存储所以在这里规避一下)
  11.  
    if (!empty($exist) || $exist !== false || $exist != null) {
  12.  
    break;
  13.  
    }
  14.  
    $aData = [
  15.  
    # 官方返回数据id
  16.  
    "request_id" => $post_data["id"],
  17.  
    # 时间
  18.  
    "created_time" => $post_data["created_time"],
  19.  
    # 订单号
  20.  
    "order_no" => $post_data["order_no"],
  21.  
    # app_id
  22.  
    "app_id" => $post_data["app_id"],
  23.  
    # 支付渠道
  24.  
    "pay_channel" => $post_data["pay_channel"],
  25.  
    # 付款金额
  26.  
    "pay_amt" => $post_data["pay_amt"],
  27.  
    # 手续费
  28.  
    "fee_amt" => $post_data["fee_amt"],
  29.  
    # 状态
  30.  
    "status" => $post_data["status"],
  31.  
    # openid
  32.  
    "sub_open_id" => $post_data["expend"]["sub_open_id"]
  33.  
    ];
  34.  
    Db::table("成功表")->insert($aData);
  35.  
    unset($aData);
  36.  
    break;
  37.  
    default:
  38.  
    # 回调失败
  39.  
    return \json_data(0, "回调错误", $post_data);
  40.  
    }
  41.  
    # 其他业务
学新通

总结

支付到这里就结束了,代码中有些自身数据要根据你的实际情况来修正哦!

下一篇准备分享一下使用Adapay实现商家分账的功能,看大家有没有需求

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfbkkh
系列文章
更多 icon
同类精品
更多 icon
继续加载