摘要:因公司業(yè)務(wù)需要需要給客戶接入支付寶支付自己以前只做過(guò)網(wǎng)頁(yè)版支付寶支付。添加功能完后我的應(yīng)用列表就會(huì)顯示添加的應(yīng)用,即支付寶支付。最后別忘了在異步方法返回一個(gè),否則支付寶會(huì)以為沒(méi)支付成功,小時(shí)內(nèi)每個(gè)幾分鐘就調(diào)一次異步接口。
因公司業(yè)務(wù)需要,需要給客戶接入支付寶支付,自己以前只做過(guò)網(wǎng)頁(yè)版支付寶支付。折騰了3天,踩了很多坑,終于搞定了,現(xiàn)在記錄一下,分享給大家.
一、首先必須通知客戶先申請(qǐng)支付寶商家賬號(hào),然后認(rèn)證。當(dāng)然這是廢話...沒(méi)有賬號(hào)還支付個(gè)毛線...
然后讓客戶登陸支付寶賬號(hào)后,右上角有個(gè)開(kāi)放平臺(tái),點(diǎn)開(kāi).
點(diǎn)開(kāi)之后是這個(gè)樣子.
這里都是需要客戶操作的,客戶點(diǎn)擊支付接入后,會(huì)有個(gè)認(rèn)證簽約頁(yè)面,簽約完之后,會(huì)生成應(yīng)用唯一標(biāo)識(shí)(APPID)。應(yīng)用創(chuàng)建完成后,系統(tǒng)會(huì)自動(dòng)跳轉(zhuǎn)到應(yīng)用詳情頁(yè)面。然后可以點(diǎn)擊 添加功能 來(lái)添加App支付功能。添加功能完后,我的應(yīng)用列表就會(huì)顯示添加的應(yīng)用,即支付寶App支付。因?yàn)槲业氖莻€(gè)人號(hào),所以沒(méi)法演示。這一部我們只需要等待客戶申請(qǐng)就好,什么也不用做。詳細(xì)流程參加支付寶官方文檔:https://docs.open.alipay.com/... 這里面唯一需要開(kāi)發(fā)者做的就是生成密鑰這一步。
點(diǎn)擊紅線部分快速簽名教程就可以跳轉(zhuǎn)到簽名工具頁(yè)面,
點(diǎn)擊下載,我是windows環(huán)境,下載完成后,打開(kāi)工具。我是php開(kāi)發(fā),所以選非JAVA適用,點(diǎn)擊生成密鑰就會(huì)出現(xiàn)兩大坨,一個(gè)是商戶私鑰一個(gè)是商戶公鑰(就是開(kāi)發(fā)者私鑰公鑰).然后右下角有個(gè)上傳公鑰按鈕,點(diǎn)擊會(huì)跳轉(zhuǎn)到支付寶開(kāi)放平臺(tái)頁(yè)面。
因?yàn)槲也皇巧碳遥瑹o(wú)法認(rèn)證,所以這是空白的。如果是商家賬號(hào),就會(huì)顯示類似于這個(gè)頁(yè)面:
點(diǎn)擊RSA設(shè)置,填上 開(kāi)發(fā)者公鑰私鑰,就會(huì)生成一個(gè)新的支付寶公鑰。到此一步,申請(qǐng)的部分完成。
下面是開(kāi)發(fā)者后臺(tái)接入的部分:
在開(kāi)始后臺(tái)代碼前,我們必須有3個(gè)參數(shù),開(kāi)發(fā)者私鑰、支付寶公鑰、APPID。 這里的開(kāi)發(fā)者私鑰也叫應(yīng)用私鑰,一個(gè)意思,不要繞暈了。
沒(méi)有這3個(gè)參數(shù),就沒(méi)法喚起支付寶支付接口!!!
準(zhǔn)備好后可以下載支付寶的官方demo代碼參考。demo在這個(gè)頁(yè)面下載:https://docs.open.alipay.com/...
打開(kāi)是醬紫:
我自己用TP5封裝了一個(gè)方法,童鞋可以參考下:
namespace appapicontroller;
use appcommoncontrollerRootsApi;
use thinkDb;
require_once EXTEND_PATH . "/alipay/AopSdk.php";
/**
支付寶
*/
class Alipay extends RootsApi
{
//應(yīng)用APPID,都是2019開(kāi)頭
const APPID = "2019*";
//開(kāi)發(fā)者私鑰去頭去尾去回車,一行字符串
const RSA_PRIVATE_KEY = "";
//支付寶公鑰(上傳開(kāi)發(fā)者公鑰(又叫應(yīng)用公鑰)后才能生成)
const ALIPAY_RSA_PUBLIC_KEY = "";
public function _initialize()
{
parent::_initialize();
}
/**
*支付方法,調(diào)用支付寶接口成功后,會(huì)返回給前端一個(gè)長(zhǎng)串的參數(shù)字符串。前端利用它喚起支付寶
*/
public function paytoOffi()
{
try { //調(diào)支付寶接口(這里寫(xiě)死測(cè)試,實(shí)際按邏輯來(lái)) $res = $this->getAlipayMsg("買單","消費(fèi)者買單",2342424214234,0.01); return json_encode($res);//必須是json格式 } catch (Exception $e) { return false; }
}
/**
用戶消費(fèi)異步通知服務(wù)器方法
@return void
*/
public function notify()
{
$arr = $_POST;
file_put_contents("d.txt",json_encode($arr),FILE_APPEND);//寫(xiě)入txt支付寶的返回?cái)?shù)據(jù)
//驗(yàn)證簽名
$aop = new AopClient();
$aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY;
$flag = $aop->rsaCheckV1($arr, null, "RSA2");
if ($flag) {
//驗(yàn)簽 //處理業(yè)務(wù),并從$arr中提取需要的參數(shù)內(nèi)容 if ($arr["trade_status"] == "TRADE_SUCCESS" || $arr["trade_status"] == "TRADE_FINISHED") { //處理交易完成或者支付成功的通知 //自己的業(yè)務(wù)邏輯,比如修改訂單為已支付 die("success"); //必須有這句,echo "success"也可以,否則支付寶會(huì)以為支付沒(méi)成功,而在一天內(nèi)連續(xù)調(diào)用異步接口,容易出錯(cuò) }
}
}
/**
調(diào)用支付寶接口方法
@param $body 訂單描述
@param $subject 訂單標(biāo)題
@param $out_trade_no 訂單號(hào)
@param string $amount 價(jià)格
@return array 支付寶返回信息
*/
private function getAlipayMsg($body, $subject, $out_trade_no, $amount)
{
$aop = new AopClient(); $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";//這里是寫(xiě)死的,支付寶網(wǎng)關(guān)地址 $aop->appId = self::APPID; $aop->rsaPrivateKey = self::RSA_PRIVATE_KEY; $aop->format = "json"; $aop->charset = "UTF-8"; $aop->signType = "RSA2"; $aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY; //實(shí)例化具體API對(duì)應(yīng)的request類,類名稱和接口名稱對(duì)應(yīng),當(dāng)前調(diào)用接口名稱:alipay.trade.app.pay $request = new AlipayTradeAppPayRequest(); //SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù) $bizcontent = "{"body":"{$body}","http://支付商品描述 . ""subject":"{$subject}","http://支付商品的標(biāo)題 . ""out_trade_no":"{$out_trade_no}","http://商戶網(wǎng)站唯一訂單號(hào) . ""timeout_express":"60m","http://該筆訂單允許的最晚付款時(shí)間,逾期將關(guān)閉交易 . ""total_amount":"{$amount}","http://訂單總金額,單位為元,精確到小數(shù)點(diǎn)后兩位,取值范圍[0.01,100000000] . ""product_code":"QUICK_MSECURITY_PAY"" . "}"; $request->setNotifyUrl("http:xxxxx.com/api/alipay/notify");//你自己的異步地址,必須寫(xiě)全,而且不能有參數(shù) $request->setBizContent($bizcontent); //這里和普通的接口調(diào)用不同,使用的是sdkExecute $response = $aop->sdkExecute($request); $result = array("order_str"=> $response); return $result;
}
}
首先前臺(tái)調(diào)支付接口paytoOffi,然后這個(gè)方法就會(huì)調(diào)getAlipayMsg方法,即調(diào)支付寶接口的方法,這4個(gè)參數(shù)描述、標(biāo)題、訂單號(hào)、價(jià)格后3個(gè)是必填的。描述可以不填,這個(gè)酌情修改。然后調(diào)接口,支付寶會(huì)返回請(qǐng)求字符串,即喚起支付寶軟件的一長(zhǎng)串字符串,這里有個(gè)大坑,官方文檔上說(shuō)直接echo 給前臺(tái)就行,但其實(shí)應(yīng)該轉(zhuǎn)成json格式返給前臺(tái),否則會(huì)報(bào)100XX錯(cuò)誤,即參數(shù)格式不正確。下面是官方的坑教程截圖:
每次看見(jiàn)這句不需要再做處理我就來(lái)氣...當(dāng)時(shí)坑了我兩天,就是沒(méi)想起來(lái)要轉(zhuǎn)JSON格式返回。我這里是把返回的字符串放進(jìn)一個(gè)數(shù)組,然后再json_encode返回。返回的字符串如果在頁(yè)面上打印是這個(gè)樣子的
我沒(méi)有截全,很長(zhǎng)一大串。(前端要去掉order_str的鍵名,取鍵值)
前端拿著這串東西就可以喚起支付寶軟件,進(jìn)行支付,支付成功后,你寫(xiě)的支付寶異步回調(diào)函數(shù)就會(huì)收到一串信息,notify方法的$_POST就有數(shù)據(jù)了。可以轉(zhuǎn)成JSON格式打印出來(lái):
{
"gmt_create": "2019-06-24 17:16:03", "charset": "UTF-8", "seller_email": "********", "subject": "u4e70u5355", "sign": "***********", "body": "u6d88u8d39u8005u4e70u5355", "buyer_id": "*******", "invoice_amount": "0.01", "notify_id": "**********", "fund_bill_list": "*********", "notify_type": "trade_status_sync", "trade_status": "TRADE_SUCCESS",//交易狀態(tài),success為支付成功 "receipt_amount": "0.01", "app_id": "*******", "buyer_pay_amount": "0.01", "sign_type": "RSA2", "seller_id": "", "gmt_payment": "2019-06-24 17:16:03", "notify_time": "2019-06-24 17:19:10", "version": "1.0", "out_trade_no": "1624677580792188",//你自己的訂單號(hào) "total_amount": "0.01",//支付總金額 "trade_no": "************",//支付寶流水號(hào) "auth_app_id":"***********", "buyer_logon_id": "",//買家的支付寶賬號(hào) "point_amount": "0.00"
}
星號(hào)部分都是有值的。
只要trade_status的值是success就是支付成功
取出里面的訂單號(hào) 價(jià)格之類的就可以寫(xiě)業(yè)務(wù)邏輯了,具體看https://docs.open.alipay.com/... 參數(shù)說(shuō)明。最后別忘了在異步方法返回一個(gè)"SUCCESS",否則支付寶會(huì)以為沒(méi)支付成功,24小時(shí)內(nèi)每個(gè)10幾分鐘就調(diào)一次異步接口。
至此,整個(gè)支付流程就走完了,支付寶雖然有點(diǎn)坑,但是比微信支付強(qiáng)多了,微信的文檔才是真的坑!歡迎童鞋們參考。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76111.html
摘要:因公司業(yè)務(wù)需要需要給客戶接入支付寶支付自己以前只做過(guò)網(wǎng)頁(yè)版支付寶支付。添加功能完后我的應(yīng)用列表就會(huì)顯示添加的應(yīng)用,即支付寶支付。最后別忘了在異步方法返回一個(gè),否則支付寶會(huì)以為沒(méi)支付成功,小時(shí)內(nèi)每個(gè)幾分鐘就調(diào)一次異步接口。 因公司業(yè)務(wù)需要,需要給客戶接入支付寶支付,自己以前只做過(guò)網(wǎng)頁(yè)版支付寶支付。折騰了3天,踩了很多坑,終于搞定了,現(xiàn)在記錄一下,分享給大家.一、首先必須通知客戶先申請(qǐng)支付...
摘要:第一次做支付寶的支付,踩了點(diǎn)小坑,還算順利。第一步當(dāng)然是在支付寶開(kāi)放平臺(tái)申請(qǐng)公鑰私鑰等,支付寶關(guān)官方文檔都有詳細(xì)介紹,這里就省略。就是那個(gè)支付寶二維碼的頁(yè)面。支付寶支付成功后會(huì)執(zhí)行這兩個(gè)方法,系統(tǒng)會(huì)把你支付的信息用方式異步傳給你的方法。 這兩天在公司做一個(gè)小型WEB項(xiàng)目,需要有支付功能。第一次做支付寶的支付,踩了點(diǎn)小坑,還算順利。激動(dòng)的我趕緊記下實(shí)現(xiàn)的流程。第一步當(dāng)然是在支付寶開(kāi)放平臺(tái)...
摘要:界面界面就這點(diǎn)東西了只需要設(shè)置后端接口就可以接收這個(gè)監(jiān)聽(tīng)的支付寶收款數(shù)據(jù)了會(huì)以方式向您的接口一段數(shù)據(jù)數(shù)據(jù)格式如下支付寶支付成功收款元。 個(gè)人微信支付寶免簽約支付解決方案 https://www.likeyunba.com/pay/ 首先呢,我不會(huì)開(kāi)發(fā)安卓App,這款A(yù)PP是我在酷安網(wǎng)看到的,非常簡(jiǎn)單的一款A(yù)PP,安裝后填寫(xiě)我們的后端接口(用于接收收款通知的)就可以接收收款通知了。所以就...
摘要:原文地址支付支付步驟為獲取支付寶的配置信息。將得到的數(shù)據(jù)請(qǐng)求支付寶客戶端進(jìn)行支付。端將拼接好的字符串拿去請(qǐng)求支付寶客戶端即可調(diào)起支付寶進(jìn)行支付。向支付寶申請(qǐng)新訂單,獲取支付。成功請(qǐng)求回來(lái)后,就可以向支付寶發(fā)出一次支付請(qǐng)求。 支付寶在所有支付方式中最好開(kāi)發(fā)的了,因?yàn)槲臋n比較清晰,而且開(kāi)發(fā)起來(lái)也比較簡(jiǎn)單。因此,支付寶的坑是相對(duì)較少的。原文地址 APP支付 APP支付步驟為: 獲取支付寶的...
閱讀 1611·2023-04-25 15:50
閱讀 1318·2021-09-22 15:49
閱讀 2947·2021-09-22 15:06
閱讀 3613·2019-08-30 15:54
閱讀 2345·2019-08-29 11:33
閱讀 2129·2019-08-23 17:56
閱讀 2163·2019-08-23 17:06
閱讀 1308·2019-08-23 15:55