crmeb新增汇付支付

前言

一、下载SDK

二、配置

三、实际操作

1.引入SDK

2.代码参考

四、回调

总结

官网文档:

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

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

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

创建支付对象

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

二、SDK配置
1、将SDK完整文件放入项目 extend 目录下(Demo中有参考文件,生产使用AdapaySdk目录)

crmeb新增汇付支付

{
  "*************DO NOT CHANGE CONTENT*************":"",
  // 支付后台有
  "api_key_live":"api_live_5a32a9c",
  "api_key_test":"api_test_ed99fa4",
  //  生成的证书商户的私钥
  "rsa_private_key":"MIICdqf9b8hJ3iTsbbTw=="
}

2.封装后的使用方法

$AdaPayService = app()->make(AdaPayService::class);
$notify_url = sys_config('site_url') . '/api/pay/notify/adapay';
$jsConfig = $AdaPayService->mpAdaPayments($rechangeData['order_id'], $rechangeData['rechange_amount'], '用户充值', $openid, $notify_url, 'chess_recharge');
return $jsConfig;

需要在 class PayController 类文件中 添加回调处理方法

case 'adapay':
          return AdaPayService::handleNotify();

crmeb新增汇付支付

需要在 class PayNotifyServices 类文件中 添加支付成功回调

public function wechatChessRecharge(string $order_id = null, string $trade_no = null)
{
    try {
        $rechangeLogServices = app()->make(RechangeLogServices::class);
        if ($rechangeLogServices->getOne(['order_id' => $order_id, 'status' => 1])) return true;
        return $rechangeLogServices->rechangeSuccess($order_id, ['trade_no' => $trade_no]);
    } catch (\Exception $e) {
        return false;
    }
}

封装的支付类

<?php

namespace crmeb\services;

use app\services\pay\PayNotifyServices;
use crmeb\utils\Hook;
use think\facade\Log;

/**
 * Class AdaPayService
 * @package crmeb\services
 */
class AdaPayService
{

    /**
     * 配置
     * @var array
     */
    private $config = [
        'app_id' => 'app_a12312',
    ];

    /**
     * AliPayService constructor.
     * @param array $config
     */
    public function __construct(array $config = [])
    {
        require_once "./extend/adapay_sdk_php/AdapaySdk/init.php";
        require_once "./extend/adapay_sdk_php/AdapaySdk/config.php";
    }

    //小程序支付
    public function mpAdaPayments($order_no, $money, $title, $open_id, $notify_url, $description)
    {
        $payment = new \AdaPaySdk\Payment();

        # 支付设置
        $payment_params = array(
            'app_id' => $this->config['app_id'],
            'order_no' => $order_no,
            'pay_channel' => 'wx_lite',
            'time_expire' => date("YmdHis", time() + 86400),
            'pay_amt' => $money,
            'goods_title' => $title,
            'goods_desc' => $title,
            'description' => $description,
            'notify_url' => $notify_url,
            'expend' => [
                'open_id' => $open_id,
            ]
        );

        # 发起支付
        $payment->create($payment_params);

        # 对支付结果进行处理
        if ($payment->isError()) {
            //失败处理
            throw new \Exception($payment->result);
        } else {
            $res = json_decode($payment->result['expend']['pay_info'], true);
            $res['timestamp'] = $res['timeStamp'];//有大小写问题
            return $res;
        }
    }

    /**
     * 支付异步回调
     * @return string
     */
    public static function handleNotify()
    {
        $adapay_tools = new \AdaPaySdk\AdapayTools();

        $post_data = json_decode($_POST['data'], 1);
        $post_data_str = json_encode($post_data, JSON_UNESCAPED_UNICODE);
        $post_sign_str = isset($_POST['sign']) ? $_POST['sign'] : '';

        // 此处只是个示例 需要测试请去掉注释
        //$post_data_str = "{\"app_id\":\"app_fe1ec54d-e7cd-432a-a994-c12c3d8295f8\",\"created_time\":\"20201115182858\",\"end_time\":\"20201115182904\",\"expend\":{\"bank_type\":\"OTHERS\",\"open_id\":\"o8jhotwaUEffs1fyWE5O3N4HWvbk\",\"sub_open_id\":\"o4WGIxA59TYBzEKdwz_s6actNIYY\"},\"id\":\"002112020111518285710173995928213929984\",\"order_no\":\"SH20201115182857625624\",\"out_trans_id\":\"4200000839202011155051561044\",\"party_order_id\":\"02212011156653808201465\",\"pay_amt\":\"0.01\",\"pay_channel\":\"wx_pub\",\"status\":\"succeeded\"}";
        //
        //$sign_flag = $adapay_tools->verifySign($post_data_str,"YXOWP5pyL38cZvXbVTyr4Lp9tpr2IzYmc5+EXuNofMTPPlCMfgXX4aBHT8QhxmKMYe95TBklWrM6IAdSLqIBXyc7CYnEYh0o54QHH4H\/yKy5yiOqFCbcHAHPhtJPU28rj+dHbG7YG\/4Qk5psFoBuOTP99ACizLy\/uiILYY3UhJk=");

        $post_data_str = "{\"app_id\":\"app_55dcbd98-988e-45d4-aafd-93e0833f2e64\",\"created_time\":\"20210827154320\",\"description\":\"description\",\"end_time\":\"20210827154414\",\"expend\":{\"sub_open_id\":\"2088002620020732\"},\"fee_amt\":\"0.01\",\"id\":\"002112021082715432010277234787138306048\",\"order_no\":\"C2021112799100519\",\"out_trans_id\":\"2021082722001420731428147993\",\"party_order_id\":\"02212108275660018000697\",\"pay_amt\":\"1.00\",\"pay_channel\":\"alipay\",\"status\":\"succeeded\"}";

        $post_sign_str = "JDRZDnB+oKorcWjEsvvzDX3HI7dCfnxQ+/l780oFTG9MO6gGmCR6MiovfXLgpmlYyoCuHVjD/5cAVfJWppr+tgg3rzQFR+3O42ZXZxctTVJXp2fVszuYeSzipKFE60Jo3aavhgkt/5Hres77u353UXMkRxUHG/hMTIwPoxg789A=";

        try {
            if (isset($post_data['type']) && $post_data['type'] == 'payment.succeeded') {
                # 先校验签名和返回的数据的签名的数据是否一致
                $sign_flag = $adapay_tools->verifySign($post_data_str, $post_sign_str);

                if ($sign_flag) {
//                var_dump("签名验证通过");
                    # 业务方自己的逻辑
                    return (new Hook(PayNotifyServices::class, 'adapay'))
                        ->listen($post_data['description'], $post_data['expend']['order_no'], $post_data['expend']['out_trans_id']);
                } else {
//                var_dump("签名验证失败");
                    # 业务方自己的逻辑
                }
            }
        } catch (\Exception $e) {
            Log::error('adapay回调异常,失败原因:' . $e->getMessage());
        }

        return false;
    }


}

 

 

 

 

 

 

 

 

 

 

 

给TA打赏
共{{data.count}}人
人已打赏
技术教程

nvm 一个nodejs版本管理工具

2023-7-15 11:25:43

运营公告

微信号已经绑定了50个小程序,不可继续绑定?项目成员如何主动解绑小程序

2023-7-13 20:07:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索