PHP 支付宝(单笔转账到银行账户接口)

alipay.fund.trans.tobank.transfer(单笔转账到银行账户接口)

小程序文档 - 支付宝文档中心

一、下载支付宝SDK,现有版本v1、v2、v3

https://github.com/alipay/alipay-sdk-php-all

github 慢的话,DNS   直达即可 140.82.112.3 github.com

【host文件路径c:\windows\system32\drivers\etc】

二、引用代码编写

<?php
 //支付宝转账到银行卡配置
    function alipay_init_bank() {
        //调用支付宝身份证认证接口
        require_once WY_ROOT . '/includes/aop/AopCertClient.php'; //支付宝加载
        require_once WY_ROOT . '/includes/aop/AopClient.php'; //支付宝加载
        require_once WY_ROOT . '/includes/aop/AopCertification.php'; //支付宝加载
        require_once WY_ROOT . '/includes/libs/Config.php'; //配置加载
        require_once dirname(WY_ROOT) . '/ApiV1' . '/function_apiv1.php'; //引用 加载
        $aop = new AopCertClient ();
        $config = Config::getInstance();
        $appCertPath = ''; //应用证书路径(要确保证书文件可读),
        $alipayCertPath = ''; //支付宝公钥证书路径(要确保证书文件可读),
        $rootCertPath = ''; //支付宝根证书路径(要确保证书文件可读),
//        $alipay_config = ''; //支付宝配置文件
        $alipay_config = $config->alipay_bank_config;
        $appCertPath = WY_ROOT . '/includes/aop/cert3/appCertPublicKey_2021002131640271.crt'; //"例如:/home/admin/cert/appCertPublicKey.crt";
        $alipayCertPath = WY_ROOT . '/includes/aop/cert3/alipayCertPublicKey_RSA2.crt'; //"例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
        $rootCertPath = WY_ROOT . '/includes/aop/cert3/alipayRootCert.crt'; //"例如:/home/admin/cert/alipayRootCert.crt";
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
//        $aop->method='alipay.fund.trans.tobank.transfer';
        $aop->appId = $alipay_config['appId'];
        $aop->rsaPrivateKey = $alipay_config['rsaPrivateKey'];
        $aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);
        $aop->apiVersion = $alipay_config['apiVersion'];
        $aop->signType = $alipay_config['signType'];
        $aop->postCharset = $alipay_config['postCharset'];
        $aop->format = $alipay_config['format'];
        $aop->isCheckAlipayPublicCert = true; //是否校验自动下载的支付宝公钥证书,如果开启校验要保证支付宝根证书在有效期内
        $aop->appCertSN = $aop->getCertSN($appCertPath); //调用getCertSN获取证书序列号
        $aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath); //调用getRootCertSN获取支付宝根证书序列号
        return $aop;
    }

 /**
     * 支付宝转账到银行卡
     * @param type $data    用户信息
     * @param type $orderId 订单号
     * @param type $money   订单金额
     * @param type $fee     手续费
     * @return type     $ret = array(
      'error' => false, //是否出错
      'error_msg' => '' //错误信息
      );
     */
    public function alipay_bank($data, $orderId, $money, $fee) {
        require_once dirname(WY_ROOT) . '/ApiV1' . '/function_apiv1.php'; //引用 加载
        $ret = array(
            'error' => false, //是否出错
            'error_msg' => '' //错误信息
        );
        $pub = new ALLClass();
        $realmoney = $money - $fee; //实际支付 
        $realmoney = sprintf("%.2f", $realmoney); //精确到小数点后两位
        require_once WY_ROOT . '/includes/aop/request/AlipayFundTransTobankTransferRequest.php';
        $request = new AlipayFundTransTobankTransferRequest ();
        $this->aop = $this->alipay_init_bank();
        $payee_card_no = $data['bank_account_id']; //银行卡号
        $payer_real_name = ''; //付款方名称
//        $payer_real_name='';//付款方名称
        $payee_account_name = $data['bank_account_name']; //收款名称,
        $payee_inst_name = $data['position']; //收款行

        $bizContentObj['out_biz_no'] = $orderId; //商户端的唯一订单号,对于同一笔转账请求,商户需保证该订单号唯一。201806300001
        $bizContentObj['amount'] = $realmoney; // $realmoney; //订单总金额,单位为元,精确到小数点后两位,STD_RED_PACKET产品取值范围[0.01,100000000];
        $bizContentObj['payer_real_name'] = $payer_real_name;
        $bizContentObj['payee_card_no'] = $payee_card_no;
        $bizContentObj['payee_account_name'] = $payee_account_name;
        $bizContentObj['payee_account_type'] = '2';
        $bizContentObj['payee_inst_name'] = $payee_inst_name;
        $bizContentObj['payee_inst_province'] = '';
        $bizContentObj['payee_inst_city'] = '';
        $bizContentObj['payee_inst_branch_name'] = '';
        $bizContentObj['payee_bank_code'] = '';
        $bizContentObj['time_liness'] = 'T0';
        $bizContentObj['memo'] = '';
        $bizContentObj['remark'] = '结算款'; //业务备注
        $pub->data_log($bizContentObj, __FUNCTION__ . '.log');
        $request->setNotifyUrl('https://alipay_notify_url.php');//回调地址
        $request->setBizContent(json_encode($bizContentObj, JSON_UNESCAPED_UNICODE));
        $result = $this->aop->execute($request);
        $pub->data_log('alipay_fund_transfer_new==' . json_encode($result, JSON_UNESCAPED_UNICODE), __FUNCTION__ . '.log');
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        if (!empty($resultCode) && $resultCode == 10000) {
            $pub->data_log('Success', __FUNCTION__ . '.log');
        } else {
            $ret['error'] = true;
            $ret['error_msg'] = $result->$responseNode->sub_msg;
            $pub->data_log('error_msg==' . $ret['error_msg'], __FUNCTION__ . '.log');
        }
        return $ret;
    }

/**
回调验签
*/
function check_sign(){
$postData = parameters_certification();
require_once WY_ROOT . '/includes/aop/AopCertClient.php'; //支付宝加载
$aop = new AopCertClient ();
$alipayCertPath = ''; //支付宝公钥证书路径(要确保证书文件可读),
$alipayCertPath = WY_ROOT . '/includes/aop/cert3/alipayCertPublicKey_RSA2.crt'; //"例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
$aop->alipayrsaPublicKey = $aop->getPublicKey($alipayCertPath);
$bool=$aop->rsaCheckV1($postData, $alipayCertPath,$postData['sign_type']);
if(!$bool){
    die('sign error.');
}

}

/**
 * 参数验证
 * @param array $field      参数索引数组【'a','b'】
 * @param array $data       需要验证数组,不传拿$_REQUEST
 * @return boolean | array  不存在参数,空参数返回false,否则返回验证数组
 */
function parameters_certification($field = [], $data = []) {
    if (empty($data)) {
        $data = $_REQUEST;
    }
    if (empty($field)) {
        return $data;
    }
    foreach ($field as $val) {
        if (isset($data[$val])) {
            if (is_array($data[$val])) {
                if (empty($data[$val])) {
                    return false;
                } else {
                    continue;
                }
            }
            if (strlen($data[$val]) > 0) {
                continue;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    return $data;
}

?>

回调的时候,默认签名使用的是 rsaCheckV1

暂时还没有碰到 rsaCheckV2 的,本来我以为我发送的是V2版本的签名,回调也是V2的

后面试了又试,rsaCheckV1 无疑了

支付宝的SDK无疑是很完善的,接入也方便很多

这里使用的是V2版本

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现Java支付宝转账银行卡,需要使用支付宝提供的转账接口,具体操作步骤如下: 1. 注册支付宝开发者账号,并创建应用获取应用的 appId、私钥和公钥; 2. 引入支付宝的 Java SDK; 3. 初始化 AlipayClient 对象,设置请求参数; 4. 调用 AlipayFundTransToaccountTransferRequest 请求对象的 setBizContent() 方法设置转账的参数,包括转账的金额、收款人账号和姓名等信息; 5. 调用 AlipayClient 的 execute() 方法发起请求,获取响应结果。 以下是一个示例代码: ``` import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayFundTransToaccountTransferRequest; import com.alipay.api.response.AlipayFundTransToaccountTransferResponse; public class AlipayTransferDemo { // 应用的 appId private static final String APP_ID = "your_app_id"; // 商户私钥 private static final String PRIVATE_KEY = "your_private_key"; // 支付宝公钥 private static final String ALIPAY_PUBLIC_KEY = "alipay_public_key"; // 支付宝网关 private static final String GATEWAY_URL = "https://openapi.alipay.com/gateway.do"; public static void main(String[] args) { // 初始化 AlipayClient AlipayClient client = new DefaultAlipayClient(GATEWAY_URL, APP_ID, PRIVATE_KEY, "json", "utf-8", ALIPAY_PUBLIC_KEY, "RSA2"); // 创建转账请求对象 AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest(); // 设置转账参数 request.setBizContent("{\"out_biz_no\":\"201806300001\",\"payee_type\":\"ALIPAY_LOGONID\",\"payee_account\":\"alipay_user_id\",\"amount\":\"1.00\",\"payer_show_name\":\"示例名称\",\"payee_real_name\":\"示例姓名\",\"remark\":\"转账备注\"}"); try { // 发起转账请求 AlipayFundTransToaccountTransferResponse response = client.execute(request); if (response.isSuccess()) { System.out.println("转账成功!"); } else { System.out.println("转账失败,错误码:" + response.getCode() + ",错误信息:" + response.getMsg()); } } catch (AlipayApiException e) { e.printStackTrace(); } } } ``` 需要注意的是,转账银行卡需要在支付宝后台进行配置,开通转账银行卡的功能。开通后,需要使用银行转账接口进行转账操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值