1. 程式人生 > >php 單筆轉賬到支付寶

php 單筆轉賬到支付寶

1.首先 去螞蟻金服簽約 單筆轉賬到支付寶

官方api文件  https://docs.open.alipay.com/309

2.需要的配置資訊

一.應用appid


二.生成金鑰

文件地址

https://docs.open.alipay.com/291/106130

根據文件步驟生成


上傳這裡的 應用公鑰



3.下載官方sdk 然後整合到自己專案

https://docs.open.alipay.com/54/103419/

官方例項

//例項化客戶端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//例項化具體API對應的request類,類名稱和介面名稱對應,當前呼叫介面名稱:alipay.open.public.template.message.industry.modify 
AlipayOpenPublicTemplateMessageIndustryModifyRequest request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();
//SDK已經封裝掉了公共引數,這裡只需要傳入業務引數
//此次只是引數展示,未進行字串轉義,實際情況下請轉義
request.setBizContent("  {" +
"    \"primary_industry_name\":\"IT科技/IT軟體與服務\"," +
"    \"primary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_code\":\"10001/20102\"," +
"    \"secondary_industry_name\":\"IT科技/IT軟體與服務\"" +
" }");
AlipayOpenPublicTemplateMessageIndustryModifyResponse response = alipayClient.execute(request); 
//呼叫成功,則處理業務邏輯
if(response.isSuccess()){
	//.....
}

效果如下

我的程式碼

<?php
/**
 * create by 適可而止
 * create time 2018/4/8
 */
namespace Org\Util;
class AlipayTransfer{
    private $appId = 'appid';
    private $rsaPrivateKey = '私鑰';
    private $alipayrsaPublicKey = "支付寶公鑰";
    private $payer_name = "xx科技";
    private $aop;
    public  function __construct()
    {
        $g_alipay = C('ALIPAY_CONFIG');
        $this->appId = $g_alipay['APPID'];//appid
        $this->rsaPrivateKey = $g_alipay['rsaPrivateKey']; //私鑰
        $this->alipayrsaPublicKey=$g_alipay['rsaPublicKey'];//支付寶公鑰
        //引入單筆轉賬sdk
        Vendor('Alipayaop.AopSdk');
    }

    public  function init_aop_config()
    {
        $this->aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $this->aop->appId = $this->appId;
        $this->aop->rsaPrivateKey = $this->rsaPrivateKey;
        $this->aop->alipayrsaPublicKey=$this->alipayrsaPublicKey;
        $this->aop->apiVersion = '1.0';
        $this->aop->signType = 'RSA2';
        $this->aop->postCharset='UTF-8';
        $this->aop->format='json';
    }

    /**
     * 單筆轉賬介面
     * @param $order_number 訂單號
     * @param $pay_no       轉賬賬號
     * @param $pay_name     轉賬使用者名稱
     * @param $amount       轉賬金額
     * @param $memo         備註
     */
    public function transfer($order_number,$pay_no,$pay_name,$amount,$memo)
    {
        //存入轉賬日誌
        $this->transferLog($order_number,$pay_no,$pay_name,$amount);
        $this->aop = new \AopClient ();
        //配置引數
        $this->init_aop_config();
        //匯入請求
        $request = new \AlipayFundTransToaccountTransferRequest ();
        $request->setBizContent("{" .
            "\"out_biz_no\":\"".$order_number."\"," .//商戶生成訂單號
            "\"payee_type\":\"ALIPAY_LOGONID\"," .//收款方支付寶賬號型別
            "\"payee_account\":\"".$pay_no."\"," .//收款方賬號
            "\"amount\":\"".$amount."\"," .//總金額
            "\"payer_show_name\":\"".$this->payer_name."\"," .//付款方賬戶
            "\"payee_real_name\":\"".$pay_name."\"," .//收款方姓名
            "\"remark\":\"".$memo."\"" .//轉賬備註
            "}");
        $result = $this->aop->execute ( $request);
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        $resultSubMsg = $result->$responseNode->sub_msg;
        //修改轉賬日誌
        $this->edit_transferLog($order_number,$resultCode,$resultSubMsg);
        if(!empty($resultCode)&&$resultCode == 10000){
            return true;
        } else {
            return false;
        }
    }

    /**
     * 存取日誌
     */
    private function transferLog($order_number,$pay_no,$pay_name,$amount)
    {
        $data['order_number'] = $order_number;
        $data['pay_no'] = $pay_no;
        $data['pay_name'] = $pay_name;
        $data['amount'] = $amount;
        $data['create_time'] = time();
        M('AlipayTransferLog')->add($data);
    }

    /**
     * 修改日誌
     */
    private function edit_transferLog($order_number,$result_code,$sub_msg)
    {
        $model = D("AlipayTransferLog");
        $where['order_number'] = $order_number;
        $result = $model->where($where)->order('create_time desc')->find();
        if ($result_code == 10000)
        {
            $result['status'] = 1;
            $sub_msg = 'success';
        }
        else
        {
            $result['status'] = 2;
        }
        $result['memo'] = $sub_msg;
        $result['update_time'] = time();
        M('AlipayTransferLog')->save($result);
    }

    /**
     * 查單介面
     */
    public function query($order_number)
    {
        $this->aop = new \AopClient ();
        //配置引數
        $this->init_aop_config();
        $request = new \AlipayFundTransOrderQueryRequest ();
        $request->setBizContent("{" .
            "\"out_biz_no\":\"".$order_number."\"" .
            "  }");
        $result = $this->aop->execute ( $request);
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        if(!empty($resultCode)&&$resultCode == 10000){
            $res_arr['code'] = '00';
            $res_arr['data'] = $result;
        } else {
            $res_arr['code'] = '-1';
        }
        return $res_arr;
    }
}
?>