App接入支付寶支付

1、App支付簡介

買家在手機、掌上電腦等無線設(shè)備的應(yīng)用程序內(nèi),可通過支付寶進行付款購買特定服務(wù)或商品,資金即時到賬。

2、App支付申請條件

1.申請前必須擁有經(jīng)過實名認(rèn)證的支付寶賬戶;
2.企業(yè)或個體工商戶可申請;
3.需提供真實有效的營業(yè)執(zhí)照,且支付寶賬戶名稱需與營業(yè)執(zhí)照主體一致;
4.如應(yīng)用開發(fā)者與支付寶賬戶名稱不一致需提供開發(fā)合作協(xié)議;
5.如應(yīng)用已上架,需提供應(yīng)用名稱和下載鏈接;若應(yīng)用未上架,需提供demo或產(chǎn)品說明文檔;
6.古玩、珠寶等奢侈品、投資類行業(yè)無法申請本產(chǎn)品;

3、簽約費率說明

費率按單筆計算;
一般行業(yè)費率:一般行業(yè)新簽手續(xù)費率將優(yōu)惠至0.55%(優(yōu)惠日至2017年6月30日)
特殊行業(yè)費率:1.2%,行業(yè)范圍包括:手機、通訊設(shè)備銷售;家用電器;數(shù)碼產(chǎn)品及配件;休閑游戲;網(wǎng)絡(luò)游戲點卡、渠道代理;游戲系統(tǒng)商;網(wǎng)游周邊服務(wù)、交易平臺;網(wǎng)游運營商(含網(wǎng)頁游戲)。
非營利性機構(gòu):需要提交資料進行審核,以支付寶官方審核通過為準(zhǔn)。

4、提現(xiàn)收費標(biāo)準(zhǔn)和限額

當(dāng)日到賬 單筆金額
0-10萬元(含10萬元):0.2% (最低2元,最高25元)
10萬元-500萬元(不含10萬元):0.025% (無上、下限)
次日到賬 0元(無上、下限)
限額 單筆:500萬元
當(dāng)日:500萬元

5、場景介紹

適用于商家在App應(yīng)用中集成支付寶支付功能。
商家APP調(diào)用支付寶提供的SDK調(diào)用支付寶客戶端內(nèi)的支付模塊,商家APP會跳轉(zhuǎn)到支付寶中完成支付,支付完后跳回到商家APP內(nèi),最后展示支付結(jié)果。
目前支持手機系統(tǒng)有:iOS(蘋果)、Android(安卓)。
5.1用戶已安裝支付寶支付流程
步驟1:用戶在商家App中選擇商品下單、確認(rèn)購買,進入支付環(huán)節(jié),選擇支付寶,用戶點擊確認(rèn)支付,如圖5.1.1;
步驟2:進入到支付寶頁面,調(diào)起支付寶支付,出現(xiàn)確認(rèn)支付界面,如圖5.1.2;
步驟3:用戶確認(rèn)收款方和金額,點擊立即支付后出現(xiàn)輸入密碼界面,如圖5.1.3;
步驟4:輸入正確密碼后,支付寶端顯示支付結(jié)果,如圖5.1.4;
步驟5:自動回跳到商家App中,商家根據(jù)付款結(jié)果個性化展示訂單處理結(jié)果,如圖5.1.5。

5.2用戶未安裝支付寶支付流程,跳轉(zhuǎn)到H5支付
步驟1:用戶在商家App中選擇商品下單、確認(rèn)購買,進入支付環(huán)節(jié),選擇支付寶,用戶點擊確認(rèn)支付,如圖5.2.1;
步驟2:用戶未安裝支付寶客戶端,則調(diào)起支付寶網(wǎng)頁支付收銀臺,用戶登錄支付寶賬戶,如圖5.2.2和圖5.2.3;
步驟3:登錄成功后,進入付款確認(rèn)頁面,如圖5.2.4;
步驟4:用戶點擊確認(rèn)付款,進入支付密碼頁面,如下圖5.2.5;用戶輸入密碼,完成支付,展示支付結(jié)果,如圖5.2.6。

6、案例及規(guī)范

  1. 目前已上線支付案例,商家可進行實際體驗。
    餓了么app、優(yōu)酷app、攜程app。
  2. 支付寶收銀臺界面規(guī)范
    列表首位+默認(rèn)勾選+Logo+推薦標(biāo)簽+標(biāo)語,最低標(biāo)準(zhǔn)為“Logo+支付寶”,并將作為審核依據(jù)。
  3. 支付寶Logo收銀臺素材下載

7、App支付接入

7.1創(chuàng)建應(yīng)用
接入App支付能力,需要在開放平臺創(chuàng)建一個應(yīng)用,通過該應(yīng)用來接入各種能力。
7.1.1成為開放平臺的入駐服務(wù)商或者商戶
入駐前準(zhǔn)備
1、公司聯(lián)系方式:包含聯(lián)系人姓名、聯(lián)系手機、聯(lián)系郵箱。
2、未注冊企業(yè)支付寶賬號的企業(yè),請?zhí)崆皽?zhǔn)備:法定代表人信息、身份證照片、實際控制人信息、常用聯(lián)系手機號碼;企業(yè)證照(營業(yè)執(zhí)照、組織機構(gòu)代碼證)照片;企業(yè)銀行賬號信息。
支付寶賬戶注冊及認(rèn)證
個人用戶可注冊個人賬號,企業(yè)用戶請注冊企業(yè)類型賬號。推薦服務(wù)商注冊企業(yè)類型支付寶賬戶,部分功能僅針對企業(yè)開放。
企業(yè)賬號注冊及認(rèn)證流程請見:
1):打開www.alipay.com,點擊【免費注冊】,選擇【企業(yè)賬戶】,輸入對應(yīng)郵箱及驗證碼,點擊【下一步】
2)驗證手機號碼,點擊【下一步】,點擊【立即查收郵件】
3)打開郵箱接收支付寶激活郵件,點擊【繼續(xù)注冊】
4)填寫賬戶相關(guān)信息,點擊【確定】
5)點擊【企業(yè)實名信息填寫】,填寫企業(yè)相關(guān)信息,上傳對應(yīng)證件及對公銀行信息
6)證件審核通過以后,按照認(rèn)證頁面的提示向支付寶收款賬戶打款,打款金額為頁面提示的金額。認(rèn)證結(jié)果會短信及郵箱的方式通知。(認(rèn)證成功后款項會退回匯款)

使用支付寶賬號登錄
企業(yè)請使用企業(yè)支付寶賬號登錄,個人可使用個人支付寶賬號登錄。
填寫公司聯(lián)系人信息
請?zhí)峁┕境S寐?lián)系人的姓名、電子郵箱及手機號碼,及時掌握開放平臺最新動態(tài)。

查閱并一鍵簽署開放平臺主要協(xié)議,完成后即成為螞蟻金服服務(wù)商
7.1.2創(chuàng)建應(yīng)用
應(yīng)用基礎(chǔ)信息在開發(fā)應(yīng)用過程中可以無需審核隨時完善。
需要完善的內(nèi)容 作用
應(yīng)用名稱 應(yīng)用名稱和應(yīng)用圖標(biāo)會在授權(quán)、分享的場景中露
出,請準(zhǔn)確填寫相關(guān)信息

注意:應(yīng)用名稱和應(yīng)用圖標(biāo)會在應(yīng)用申請上線時進行審核,所以在配置時,建議先了解相關(guān)審核規(guī)則,點此了解。
7.2配置應(yīng)用
7.2.1添加應(yīng)用功能
開發(fā)者在開發(fā)過程中,可以添加自己需要的功能到“功能列表”。
不同的功能會有不同的使用條件,如果某個功能的使用條件為簽約,則使用者在使用此功能前,需要簽約對應(yīng)的產(chǎn)品,具體簽約方式,可參考“如何使用應(yīng)用”。

7.2.2配置應(yīng)用環(huán)境
開發(fā)者所需配置內(nèi)容請參考:
字段名稱 字段描述
應(yīng)用網(wǎng)關(guān) 用于接收支付寶異步通知,例如口碑開店中,需要配置此網(wǎng)關(guān)來接收開發(fā)者門店被動通知。
授權(quán)回調(diào)地址 第三方授權(quán)或用戶信息授權(quán)后回調(diào)地址。授權(quán)鏈接中配置的redirect_uri的值必須與此值保持一致。(如:https://www.alipay.com) 注:當(dāng)填入該地址時,系統(tǒng)會自動進行安全檢測,詳情請參考安全檢測。
RSA(SHA256)密鑰 開發(fā)者要保證接口中使用的私鑰與此處的公鑰匹配,否則無法調(diào)用接口??蓞⒖济荑€的生成與配置,且接口參數(shù)sign_type=RSA2。
RSA(SHA1)密鑰 同上,且接口參數(shù)sign_type=RSA。
7.2.3應(yīng)用申請上線
應(yīng)用開發(fā)完成后,請開發(fā)者自行進行驗收并完成安全性檢查(安全性檢查可參考《開放平臺第三方應(yīng)用安全開發(fā)指南》),驗收檢查完成后,可“提交審核”。應(yīng)用上線成功后,狀態(tài)變?yōu)橐焉暇€,該狀態(tài)下的應(yīng)用能夠調(diào)用生產(chǎn)環(huán)境的接口。
開發(fā)者點擊“提交審核”后,預(yù)計會有1個工作日的審核時間,請耐心等待。如需更快收到通知,請使用支付寶客戶端掃碼接收審核結(jié)果。
應(yīng)用上線后可新增功能、刪除功能,操作后實時生效。刪除功能時請謹(jǐn)慎操作,如果線上已經(jīng)有用戶使用此功能,刪除功能后會導(dǎo)致無法使用。
7.2.4簽約
應(yīng)用上線后,開發(fā)者可以點擊“概覽”頁簽中“功能選項”右側(cè)的“立即簽約”按鈕,如下圖。

7.2.5生成RSA秘鑰
支付寶提供一鍵生成工具便于開發(fā)者生成一對RSA密鑰,可通過下方鏈接下載密鑰生成工具:
下載該工具后,解壓打開文件夾,運行“RSA簽名驗簽工具.bat”(WINDOWS)或“RSA簽名驗簽工具.command”(MAC_OSX)。

詳細(xì)步驟:
1.根據(jù)開發(fā)語言選擇密鑰格式。
2.選擇密鑰長度,建議使用2048位。
3.點擊 “生成密鑰”,會自動生成商戶應(yīng)用公鑰和應(yīng)用私鑰。
4.點擊“打開密鑰文件路徑”,即可找到生成的公私鑰。如圖:

生成的私鑰需妥善保管,避免遺失,不要泄露。應(yīng)用私鑰需填寫到代碼中供簽名時使用。應(yīng)用公鑰需提供給支付寶賬號管理者上傳到支付寶開放平臺。
7.2.6配置秘鑰
為了保證交易雙方的身份和數(shù)據(jù)安全,需要配置雙方密鑰。
在“我的應(yīng)用”中,選擇要配置密鑰的應(yīng)用,點擊“查看”。記錄對應(yīng)的APPID(下圖紅框處),在代碼中使用。

在“應(yīng)用環(huán)境”-“接口加簽方式”下方點擊“設(shè)置應(yīng)用公鑰”。
注:接口中的sign_type參數(shù)應(yīng)與上傳密鑰的加簽方式一致。例如接口參數(shù)中sign_type=RSA2,請求時就會使用此處設(shè)置的RSA2(SHA256)公鑰驗簽。
建議使用RSA2加簽方式。

根據(jù)開發(fā)者的條件設(shè)置應(yīng)用公鑰或上傳公鑰證書,常規(guī)請點擊設(shè)置應(yīng)用公鑰。

把簽名驗簽工具里“公鑰”的內(nèi)容復(fù)制到此處,點擊“保存”完成密鑰設(shè)置。

保存成功后,在同一頁面查看或修改應(yīng)用公鑰或上傳應(yīng)用公鑰證書。

保存支付寶公鑰內(nèi)容,在代碼中驗簽使用。

7.3開發(fā)
App支付為開發(fā)者提供了Android和iOS的客戶端SDK, 為了驗證交易數(shù)據(jù)的來源,開發(fā)者需要在商家后臺對交易數(shù)據(jù)進行加簽, 驗簽,那么就需要集成開放平臺服務(wù)端SDK
下載客戶端SDK | 下載服務(wù)端SDK

7.3.1集成客戶端SDK
在集成App支付能力時,為主流移動平臺的App提供集成方式
了解更多Android平臺集成 | 了解更多iOS平臺集成
此處以iOS為例:
步驟1:啟動IDE(如Xcode),把iOS包中的壓縮文件中以下文件拷貝到項目文件夾下,并導(dǎo)入到項目工程中。
AlipaySDK.bundle
AlipaySDK.framework
在Build Phases選項卡的Link Binary With Libraries中,增加以下依賴:

步驟2:封裝方法,用于商戶客戶端與商戶服務(wù)端通信:發(fā)生支付時客戶端上送訂單詳細(xì)信息給服務(wù)器,服務(wù)器簽名后返回給客戶端。

/*
     *生成訂單信息
     */
    //將商品信息賦予AlixPayOrder的成員變量
    Order* order = [Order new];
    
    // NOTE: app_id設(shè)置
    order.app_id = appID;
    
    // NOTE: 支付接口名稱
    order.method = @"alipay.trade.app.pay";
    
    // NOTE: 參數(shù)編碼格式
    order.charset = @"utf-8";
    
    // NOTE: 當(dāng)前時間點
    NSDateFormatter* formatter = [NSDateFormatter new];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    order.timestamp = [formatter stringFromDate:[NSDate date]];
    
    // NOTE: 支付版本
    order.version = @"1.0";
    
    // NOTE: sign_type 根據(jù)商戶設(shè)置的私鑰來決定
    order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
    
    // NOTE: 商品數(shù)據(jù)
    order.biz_content = [BizContent new];
    order.biz_content.body = @"我是測試數(shù)據(jù)";
    order.biz_content.subject = @"1";
    order.biz_content.out_trade_no = [self generateTradeNO]; //訂單ID(由商家自行制定)
    order.biz_content.timeout_express = @"30m"; //超時時間設(shè)置
    order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品價格

步驟3:訂單支付調(diào)用方法
方法原型:-(void)payOrder:(NSString )orderStr fromScheme:(NSString )schemeStr callback:(CompletionBlock)completionBlock;
參數(shù)名稱 參數(shù)描述
NSString
scheme 商戶程序注冊的URL protocol,供支付完成后回調(diào)商戶程序使用。
(CompletionBlock)completionBlock 快捷支付開發(fā)包回調(diào)函數(shù),返回免登、支付結(jié)果。本地未安裝支付寶客戶端,或未成功調(diào)用支付寶客戶端進行支付的情況下(走H5收銀臺),會通過該completionBlock返回支付結(jié)果。相應(yīng)的結(jié)果參考"客戶端同步返回"。
NSString
orderString app支付請求參數(shù)字符串,主要包含商戶的訂單信息,key=value形式,以&連接。

步驟4:處理客戶端返回URL
方法原型:-(void)processOrderWithPaymentResult:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock;
參數(shù)名稱 參數(shù)描述
NSURL *resultUrl 支付寶客戶端回傳的url
(CompletionBlock)completionBlock 本地安裝了支付寶客戶端,且成功調(diào)用支付寶客戶端進行支付的情況下,會通過該completionBlock返回支付結(jié)果
備注:請在APPDelegate的- (BOOL)application:(UIApplication *)app openURL:(NSURL )url options:(NSDictionary<NSString, id> *)options 中調(diào)用該方法。
在支付過程結(jié)束后,會通過callbackBlock同步返回支付結(jié)果(callbackBlock是調(diào)用支付同步的回調(diào))。支付結(jié)果中參數(shù)的提取,必須通過CompletionBlock獲取,禁止開發(fā)者私自解析支付結(jié)果返回的URL,參數(shù)說明見"客戶端同步返回"。

7.3.2集成服務(wù)端SDK
JAVA服務(wù)端SDK生成APP支付訂單信息示例

//實例化客戶端
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//實例化具體API對應(yīng)的request類,類名稱和接口名稱對應(yīng),當(dāng)前調(diào)用接口名稱:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù)。以下方法為sdk的model入?yún)⒎绞?model和biz_content同時存在的情況下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody("我是測試數(shù)據(jù)");
model.setSubject("App支付測試Java");
model.setOutTradeNo(outtradeno);
model.setTimeoutExpress("30m");
model.setTotalAmount("0.01");
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("商戶外網(wǎng)可以訪問的異步地址");
try {
        //這里和普通的接口調(diào)用不同,使用的是sdkExecute
        AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
        System.out.println(response.getBody());//就是orderString 可以直接給客戶端請求,無需再做處理。
    } catch (AlipayApiException e) {
        e.printStackTrace();
}

JAVA服務(wù)端驗證異步通知信息參數(shù)示例

//獲取支付寶POST過來反饋信息
Map<String,String> params = new HashMap<String,String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
    String name = (String) iter.next();
    String[] values = (String[]) requestParams.get(name);
    String valueStr = "";
    for (int i = 0; i < values.length; i++) {
        valueStr = (i == values.length - 1) ? valueStr + values[i]
                    : valueStr + values[i] + ",";
  }
  //亂碼解決,這段代碼在出現(xiàn)亂碼時使用。
  //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
  params.put(name, valueStr);
 }
//切記alipaypublickey是支付寶的公鑰,請去open.alipay.com對應(yīng)應(yīng)用下查看。
//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
boolean flag = AlipaySignature.rsaCheckV1(params, alipaypublicKey, charset, "RSA2")

8、系統(tǒng)交互流程

系統(tǒng)交互流程

如圖,以Android平臺為例:
第2步:請求商戶服務(wù)端,獲取簽名后的訂單信息。使用簽名是為了在商戶與支付寶之間的數(shù)據(jù)傳輸時,防止數(shù)據(jù)內(nèi)容被篡改。開放平臺下載的sdk已將RSA(SHA1)簽名驗簽方法封裝,開發(fā)者只需要調(diào)用sdk配置業(yè)務(wù)入?yún)⒓纯?,用sdk封裝的方法發(fā)送請求到開放平臺時,sdk會自動簽名。如開發(fā)者不用sdk,可根據(jù)SHA1規(guī)則自己拼寫簽名方法。
第4步:調(diào)用支付接口:此消息就是本接口所描述的支付寶客戶端SDK提供的支付對象PayTask,將商戶簽名后的訂單信息傳進payv2方法喚起支付寶收銀臺,交易數(shù)據(jù)格式具體參見請求參數(shù)說明。
第5步:支付請求:支付寶客戶端SDK將會按照商戶客戶端提供的請求參數(shù)發(fā)送支付請求。
第8步:接口返回支付結(jié)果:商戶客戶端在第4步中調(diào)用的支付接口,會返回最終的支付結(jié)果(即同步通知),參見客戶端同步返回
第13步:用戶在支付寶APP或H5收銀臺完成支付后,會根據(jù)商戶在手機網(wǎng)站支付API中傳入的前臺回跳地址return_url自動跳轉(zhuǎn)回商戶頁面,同時在URL請求中附帶上支付結(jié)果參數(shù)。同時,支付寶還會根據(jù)原始支付API中傳入的異步通知地址notify_url,通過POST請求的形式將支付結(jié)果作為參數(shù)通知到商戶系統(tǒng),詳情見支付結(jié)果異步通知。

9.交易輔助接口:

API英文名 API中文名 完整文檔
alipay.trade.query 交易查詢接口 查看文檔
alipay.trade.close 交易關(guān)閉接口 查看文檔
alipay.trade.refund 交易退款接口 查看文檔
alipay.trade.fastpay.refund.query 交易退款查詢接口 查看文檔
alipay.data.dataservice.bill.downloadurl.query 查詢賬單下載地址接口 查看文檔

10、接口對賬功能

賬單生成時間:每日賬單一般會在次日10點或之前生成。每月賬單一般會在次月4日或之前生成。

10.1對賬場景介紹

商戶/系統(tǒng)商可通過接口下載指定日期(當(dāng)天除外)的業(yè)務(wù)明細(xì)賬單文件,并結(jié)合自身業(yè)務(wù)系統(tǒng)實現(xiàn)自動對賬。

10.2調(diào)用流程

商戶系統(tǒng)調(diào)用查詢對賬單下載地址接口alipay.data.dataservice.bill.downloadurl.query,傳入指定日期,獲得該日期賬單文件的下載地址。查看接口詳情
商戶系統(tǒng)通過HTTP方式后臺訪問賬單下載鏈接,將賬單csv文件下載到本地后自行處理。注意該下載鏈接僅30秒,在得到鏈接后系統(tǒng)需要立刻請求下載賬單文件。

10.3使用SDK快速接入

查詢對賬單下載地址接口alipay.data.dataservice.bill.downloadurl.query:

AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //獲得初始化的AlipayClient
AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();//創(chuàng)建API對應(yīng)的request類
request.setBizContent("{" +
"    \"bill_type\":\"trade\"," +
"    \"bill_date\":\"2016-04-05\"" +
"  }");//設(shè)置業(yè)務(wù)參數(shù)
AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);
System.out.print(response.getBody());
//根據(jù)response中的結(jié)果繼續(xù)業(yè)務(wù)邏輯處理

關(guān)鍵入?yún)ⅲ?br> 參數(shù)名稱 參數(shù)說明
bill_type 固定傳入trade
bill_date 需要下載的賬單日期,最晚是當(dāng)期日期的前一天
關(guān)鍵出參:
參數(shù)名稱 參數(shù)說明
bill_download_url 賬單文件下載地址,30秒有效
下載賬單文件:

//將接口返回的對賬單下載地址傳入urlStr
String urlStr = "http://dwbillcenter.alipay.com/downloadBillFile.resource?bizType=X&userId=X&fileType=X&bizDates=X&downloadFileName=X&fileId=X";
//指定希望保存的文件路徑
String filePath = "/Users/fund_bill_20160405.csv";
URL url = null;
HttpURLConnection httpUrlConnection = null;
InputStream fis = null;
FileOutputStream fos = null;
try {
    url = new URL(urlStr);
    httpUrlConnection = (HttpURLConnection) url.openConnection();
    httpUrlConnection.setConnectTimeout(5 * 1000);
    httpUrlConnection.setDoInput(true);
    httpUrlConnection.setDoOutput(true);
    httpUrlConnection.setUseCaches(false);
    httpUrlConnection.setRequestMethod("GET");
    httpUrlConnection.setRequestProperty("Charsert", "UTF-8");
    httpUrlConnection.connect();
    fis = httpUrlConnection.getInputStream();
    byte[] temp = new byte[1024];
    int b;
    fos = new FileOutputStream(new File(filePath));
    while ((b = fis.read(temp)) != -1) {
        fos.write(temp, 0, b);
        fos.flush();
    }
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        fis.close();
        fos.close();
        httpUrlConnection.disconnect();
    } catch (NullPointerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容