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

目录

前言

一、下载SDK

二、配置

三、实际操作

1.引入SDK

2.代码参考

四、回调

总结


官网文档:

帮助开发者了解所有技术对接参数和请求_开发者_Adapay


一、SDK下载

下载语言对应的SDK - 这里我下载PHP

帮助开发者了解所有技术对接参数和请求_开发者_Adapay

创建支付对象

帮助开发者了解所有技术对接参数和请求_开发者_Adapay

二、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);
        }
                # 其他业务
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要在UniApp中实现调用微信支付,你需要进行以下步骤: 1. 配置微信支付 在你的UniApp项目中,首先需要在 `manifest.json` 文件中配置微信支付的相关信息。在 `app-plus` -> `uni-app` -> `wechatpay` 节点下,填写你的微信支付相关参数,如:appid、mch_id、api_key等。 2. 调用微信支付接口 在需要调用微信支付的页面或组件中,可以通过 `uni.requestPayment` 方法来发起支付请求。该方法接收一个包含支付相关参数的对象,包括订单号、总金额、商品描述等。示例代码如下: ```javascript uni.requestPayment({ provider: 'wxpay', orderInfo: { appid: 'your appid', // 与配置文件中的appid一致 mch_id: 'your mch_id', // 与配置文件中的mch_id一致 nonce_str: 'your nonce_str', // 随机字符串 sign_type: 'MD5', sign: 'your sign', // 签名 body: 'your body', // 商品描述 out_trade_no: 'your out_trade_no', // 商户订单号 total_fee: 'your total_fee', // 总金额,单位为分 spbill_create_ip: 'your spbill_create_ip', // 终端ip notify_url: 'your notify_url' // 支付结果通知地址 }, success(res) { console.log('支付成功', res); }, fail(err) { console.log('支付失败', err); } }); ``` 3. 处理支付结果 在支付请求完成后,可以通过 `success` 回调函数来处理支付成功的情况,通过 `fail` 回调函数来处理支付失败的情况。你可以根据实际需求,进行相应的业务处理,如更新订单状态、跳转到支付成功页面等。 请确保你已经在微信开放平台上注册了开发者账号,并且已经完成了相关的配置和认证。另外,为了保证支付安全,建议将生成签名的逻辑放在服务端进行。 希望对你有所帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值