php 支付寶新版本app支付以及回調


;支付寶快速接入;

 

支付寶2017年新版本支付基本業務邏輯

服務端生成字符串 交給客戶端,

客戶端調用接口,將這段字符串str傳過去 調用起支付界面。

其中字符串str包含了所有請求參數,以及請求參數和用戶自己生成的私鑰進行加密處理生成sign

(所有請求參數按照鍵值順序排序。然后以rsa2加密手段和用戶生成的私鑰2048的那種進行加密)

 

下面上代碼。找到支付寶skd里的 AopClient.php文件 填上如下配置

  

public $appId = "20170925123213213"; //記得是appid 不是以前的pid

//私鑰值 2048的那種私鑰 用戶自己生成的
 public $rsaPrivateKey="MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQCCeAyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNHXwZJYxCjy6QVgsw6uyz0IQx0Hq5NAn99jk5OfYVpfnyFOZwqF4xwG9LA9CAK/BYUSc/yGN2I9e/2hxkIcKpwBUmdecCQjW7L0hXXVoOP4d9I5EUNAvlwUYWkxZNlblZ3akir17JCcRyS99HpaU37RP+Tu+RqPk/ZtJh4KlT5uS0Y760bBUvSLMitFcVMJ+Gnt7GbLqRNAoGAO7NL+MUFu64Q+s+g1z9kwq5S1CbI3YbUfSDP1Uq3PJ4cEiwPB93fQew3hyQ9NKs+QkTNah90/n8zlhypIUsrUAsR/uBjbgs39jGGxfFwPWvjHyQiT6z2H9YCcgOHi2yWZchJIbTF0RP6qeJyZV02FOauvyFEcFxBA+NukI1wcCE=";
//支付寶公鑰(非生成私鑰對應的那個公鑰,生成的公鑰叫應用公鑰。上傳到支付寶后台后會生成支付公鑰)
public $alipayrsaPublicKey="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqx1N29eEAkv+InFjskPXo0CsJEidvm6dTLA13TXWfj8OvoMVag5Cim7byZCbI4JpGBRgNP7OnTeTsYesPx8QBBxxxxxxxxxxxxxfOW8i9RND48p0DxZ1SkGvQwnUQ8eJcy0CePH7SzQIDAQAB";

 //簽名類型 
public $signType = "RSA2";

 

服務端生成字符串str

 

     require_once "/core/public/plugin/alipay20171012/AopSdk.php";
        $c = new AopClient;        
        $request = new AlipayTradeAppPayRequest();
        
        /**業務參數**/
        // $content['body'] = "Iphone6 16G"; //對一筆交易的具體描述信息。如果是多種商品,請將商品描述字符串累加傳給body。非必填參數
        $content['subject'] = "給用戶充值10000鑽石";//商品的標題/交易標題/訂單標題/訂單關鍵字等。
        $content['out_trade_no'] = $out_trade_no;//商戶網站唯一訂單號
        // $content['timeout_express'] = "30m";//該筆訂單允許的最晚付款時間,逾期將關閉交易。取值范圍:1m~15d。m-分鍾,h-小時,d-天,1c-當天(1c-當天的情況下,無論交易何時創建,都在0點關閉)。 該參數數值不接受小數點, 如 1.5h,可轉換為 90m。注:若為空,則默認為15d。
        $content['total_amount'] =number_format($money,2,".","");//    訂單總金額,單位為元,精確到小數點后兩位,取值范圍[0.01,100000000],
        $content['product_code'] = "QUICK_MSECURITY_PAY";//    銷售產品碼,商家和支付寶簽約的產品碼,為固定值QUICK_MSECURITY_PAY
        // $content['goods_type'] = "0";//    商品主類型:0—虛擬類商品,1—實物類商品注:虛擬類商品不支持使用花唄渠道  非必填參數
        $con = json_encode($content);//$content是biz_content的值,將之轉化成字符串
        /**業務參數**/

        /**公共參數**/
        $param = array();
        $param['app_id'] = $c->appId;//支付寶分配給開發者的應用ID
        $param['method'] = 'alipay.trade.app.pay';//接口名稱
        $param['charset'] = 'utf-8';//請求使用的編碼格式
        $param['sign_type'] = 'RSA2';//商戶生成簽名字符串所使用的簽名算法類型
        $param['timestamp'] = date("Y-m-d H:i:s");//發送請求的時間,格式"yyyy-MM-dd HH:mm:ss"
        $param['version'] = '1.0';//調用的接口版本,固定為:1.0
        $param['notify_url'] = WEBHOST.'/pay/alinotify';//支付寶服務器主動通知地址
        $param['biz_content'] = $con;//業務請求參數的集合,長度不限,json格式
        /**公共參數**/
        
         //生成簽名
        $paramStr = $c->getSignContent($param);
        $sign = $c->alonersaSign($paramStr,$c->rsaPrivateKey,'RSA2');
        
        $param['sign'] = $sign;
        $str = $c->getSignContentUrlencode($param);//返回給客戶端

 

 

異步通知處理

異步通知主要就是 驗證簽名是否合法。

代碼很簡單

require_once dirname(dirname(dirname(__FILE__)))."/core/public/plugin/alipay20171012/AopSdk.php";
$c = new AopClient;
        
$result = $c->rsaCheckV1($_POST,$c->alipayrsaPublicKey,$_POST['sign_type']);

這里如果校驗成功 $result 返回true 注意一定校驗的公鑰是支付寶公鑰,非自己生成的那個公鑰

校驗成功后

1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號;2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額);3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據對應的操作方(有的時候,一個商戶可能有多個seller_id/seller_email);4、驗證app_id是否為該商戶本身。上述1、2、3、4有任何一個驗證不通過,則表明同步校驗結果是無效的,只有全部驗證通過后,才可以認定買家付款成功。

這些都簡單。沒什么好說的。 后面就自己業務處理上的了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM