Android 支付寶支付

此項(xiàng)目已開(kāi)源 趕快來(lái)圍觀 Start支持下吧

客戶端開(kāi)源地址-JPay】【服務(wù)端端開(kāi)源地址-在com.javen.alipay

包名下

上一篇詳細(xì)介紹了微信APP支付點(diǎn)擊這里

此篇文章來(lái)詳細(xì)介紹下支付寶APP支付

目錄

1柿祈、支付寶與微信對(duì)比(申請(qǐng)、費(fèi)率、結(jié)算周期)

2转唉、支付寶上線應(yīng)用

3粱快、支付寶App支付Android集成流程詳解

4恬砂、服務(wù)端實(shí)現(xiàn)(建議直接官方提供的服務(wù)端SDK)

5篡殷、客戶端實(shí)現(xiàn)

6瞬内、常見(jiàn)錯(cuò)誤解決方案(ALI40247卓箫、AL38173)

補(bǔ)充(20170513)? 支付寶APP支付可以使用沙箱環(huán)境測(cè)試载矿。如需開(kāi)啟測(cè)試模式只需要在OnCreate中添加如下代碼。沙箱環(huán)境測(cè)試APP支付中請(qǐng)使用沙箱版錢包測(cè)試:點(diǎn)擊開(kāi)發(fā)者中心-沙箱環(huán)境-沙箱工具

EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);


使用沙箱環(huán)境測(cè)試

1烹卒、支付寶與微信對(duì)比

申請(qǐng):【微信開(kāi)發(fā)平臺(tái)】注冊(cè)的郵箱不能與騰訊其他產(chǎn)品同號(hào)闷盔,需要開(kāi)發(fā)者資質(zhì)認(rèn)證(需要¥300,而且支付商戶與公眾號(hào)不公用)而支付寶只需要企業(yè)實(shí)名認(rèn)證旅急,其他質(zhì)料類似(營(yíng)業(yè)執(zhí)照逢勾、組織機(jī)構(gòu)代碼(現(xiàn)在都三證合一了))。

費(fèi)率:

微信簽約匯率參考質(zhì)料】【支付寶簽約匯率參考質(zhì)料

結(jié)算周期:

微信結(jié)算周期:話費(fèi)通訊藐吮、財(cái)經(jīng)資訊溺拱、股票軟件類、網(wǎng)絡(luò)虛擬服務(wù)以及互聯(lián)網(wǎng)相關(guān)行業(yè) T+7? 眾籌 T+3 其他T+1谣辞,結(jié)算款項(xiàng)自動(dòng)提現(xiàn)到商戶的結(jié)算賬戶迫摔,一般從結(jié)算日起3個(gè)工作日到賬(具體到賬時(shí)間視不同銀行到賬情況而定)

支付寶結(jié)算周期:及時(shí)到支付寶賬號(hào)

2、支付寶上線應(yīng)用

1泥从、注冊(cè)賬號(hào)并實(shí)名認(rèn)證

注冊(cè)賬號(hào)了沒(méi)有實(shí)名認(rèn)證進(jìn)入開(kāi)發(fā)平臺(tái)的管理中心會(huì)提示如下圖


實(shí)名認(rèn)證


為什么要實(shí)名認(rèn)證

賬戶認(rèn)證-商家認(rèn)證流程介紹


商家認(rèn)證流程

2句占、創(chuàng)建應(yīng)用開(kāi)通支付并上線

官方文檔有詳細(xì)的介紹-創(chuàng)建應(yīng)用、配置應(yīng)用歉闰、上線應(yīng)用

資源下載:App支付DEMO&SDK辖众、生成與配置密鑰


資源下載匯總


簽名工具

注意簽名工具目錄不能包含中文


簽名工具的使用


上傳密鑰

這里上傳的是rsa_public_key.pemJava版簽名使用的密鑰是rsa_private_key_pkcs8.pem

3卓起、支付寶App支付Android集成流程詳解

官方文檔點(diǎn)擊這里

1、導(dǎo)入支付寶SDK 其中SDK在圖資源下載匯總的WS.APP_PAY_SDK_BASE_20.zip中

2凹炸、修改Manifest

在商戶應(yīng)用工程的AndroidManifest.xml文件里面添加聲明:

android:name="com.alipay.sdk.app.H5PayActivity"

android:configChanges="orientation|keyboardHidden|navigation"

android:exported="false"

android:screenOrientation="behind" >

android:name="com.alipay.sdk.auth.AuthActivity"

android:configChanges="orientation|keyboardHidden|navigation"

android:exported="false"

android:screenOrientation="behind" >

3戏阅、權(quán)限聲明

4、如需混洗啤它、添加混淆規(guī)則

在商戶應(yīng)用工程的proguard-project.txt里添加以下相關(guān)規(guī)則:

alipaySDK-xxxxx.jar根據(jù)下載的做響應(yīng)的修改

-libraryjars libs/alipaySDK-xxxxx.jar

-keep class com.alipay.android.app.IAlixPay{*;}

-keep class com.alipay.android.app.IAlixPay$Stub{*;}

-keep class com.alipay.android.app.IRemoteServiceCallback{*;}

-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}

-keep class com.alipay.sdk.app.PayTask{ public *;}

-keep class com.alipay.sdk.app.AuthTask{ public *;}

5奕筐、支付接口調(diào)用

獲取PayTask支付對(duì)象調(diào)用支付(支付行為需要在獨(dú)立的非ui線程中執(zhí)行

)具體實(shí)現(xiàn)參考客戶端實(shí)現(xiàn),調(diào)用支付需要使用到orderInfo具體實(shí)現(xiàn)參考服務(wù)端實(shí)現(xiàn)变骡。

6离赫、支付結(jié)果獲取和處理

調(diào)用pay方法支付后,將通過(guò)2種途徑獲得支付結(jié)果:

1塌碌、同步返回商戶應(yīng)用客戶端通過(guò)當(dāng)前調(diào)用支付的Activity的Handler對(duì)象渊胸,通過(guò)它的回調(diào)函數(shù)獲取支付結(jié)果。

2台妆、異步通知商戶需要提供一個(gè)http協(xié)議的接口翎猛,包含在請(qǐng)求支付的入?yún)⒅校鋕ey對(duì)應(yīng)notify_url接剩。支付寶服務(wù)器在支付完成后切厘,會(huì)以POST方式調(diào)用notify_url傳輸數(shù)據(jù)。

4懊缺、服務(wù)端實(shí)現(xiàn)

代碼來(lái)自Demo 并做簡(jiǎn)單的封裝


具體實(shí)現(xiàn)截圖

設(shè)置支付寶業(yè)務(wù)參數(shù)


設(shè)置支付寶業(yè)務(wù)參數(shù)

注意:支付寶App支付不支持沙盒模式(此坑糾結(jié)了很長(zhǎng)時(shí)間)疫稿,使用沙盒模式會(huì)出現(xiàn)ALI40247錯(cuò)誤,文末有錯(cuò)誤的詳細(xì)說(shuō)明鹃两。

核心實(shí)現(xiàn)代碼如下

/**

* App支付

*/

public void appPay(){

String orderInfo;

try {

String body="我是測(cè)試數(shù)據(jù)";

String passback_params="123";

String subject="1";

String total_amount="0.01";

String notify_url="http://javen.ittun.com/alipay/pay_notify";

String appId;

String rsa_private;

if (isDebug) {

appId=prop.get("test_appId").trim();

rsa_private=prop.get("test_rsa_private").trim();

System.out.println("test遗座。。怔毛。员萍。");

}else {

appId=prop.get("appId").trim();

rsa_private=prop.get("rsa_private").trim();

}

System.out.println("appId:"+appId);

System.out.println("rsa_private:"+rsa_private);

BizContent content = new BizContent();

content.setBody(body);

content.setOut_trade_no(OrderInfoUtil2_0.getOutTradeNo());;

content.setPassback_params(passback_params);

content.setSubject(subject);

content.setTotal_amount(total_amount);

content.setProduct_code("QUICK_MSECURITY_PAY");

Map params = OrderInfoUtil2_0.buildOrderParamMap(appId,notify_url,content);

String orderParam = OrderInfoUtil2_0.buildOrderParam(params);

String sign = OrderInfoUtil2_0.getSign(params, rsa_private);

orderInfo = orderParam + "&" + sign;

log.info("orderInfo>"+orderInfo);

result.success(orderInfo);

renderJson(result);

} catch (Exception e) {

e.printStackTrace();

result.addError("system error");

}

}

具體實(shí)現(xiàn)參考【開(kāi)源項(xiàng)目

補(bǔ)充 使用支付服務(wù)端SDK實(shí)現(xiàn)獲取預(yù)付訂單

1腾降、先獲取到AlipayClient

alipayClient = new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, alipayPulicKey, signType);

2拣度、使用AlipayTradeAppPayRequest封裝請(qǐng)求

/**

* App支付

* @param model

* @param notifyUrl

* @return

* @throws AlipayApiException

*/

public static String startAppPayStr(AlipayTradeAppPayModel model, String notifyUrl) throws AlipayApiException{

AlipayTradeAppPayResponse response = appPay(model,notifyUrl);

return response.getBody();

}

/**

* App 支付

* https://doc.open.alipay.com/docs/doc.htm?treeId=54&articleId=106370&docType=1

* @param model

* @param notifyUrl

* @return

* @throws AlipayApiException

*/

public static AlipayTradeAppPayResponse appPay(AlipayTradeAppPayModel model, String notifyUrl) throws AlipayApiException{

//實(shí)例化具體API對(duì)應(yīng)的request類,類名稱和接口名稱對(duì)應(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同時(shí)存在的情況下取biz_content)抗果。

request.setBizModel(model);

request.setNotifyUrl(notifyUrl);

//這里和普通的接口調(diào)用不同,使用的是sdkExecute

AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);

return response;

}

3奸晴、控制器封裝數(shù)據(jù)給客戶端

/**

* app支付

*/

public void appPay(){

try {

AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

model.setBody("我是測(cè)試數(shù)據(jù)");

model.setSubject("App支付測(cè)試-By Javen");

model.setOutTradeNo(StringUtils.getOutTradeNo());

model.setTimeoutExpress("30m");

model.setTotalAmount("0.01");

model.setPassbackParams("callback params");

model.setProductCode("QUICK_MSECURITY_PAY");

String orderInfo = AliPayApi.startAppPayStr(model,AliPayApi.notify_domain+"/alipay/app_pay_notify");

result.success(orderInfo);

renderJson(result);

} catch (AlipayApiException e) {

e.printStackTrace();

result.addError("system error");

}

}

服務(wù)端異步通知

/**

* App支付支付回調(diào)通知

* https://doc.open.alipay.com/docs/doc.htm?treeId=54&articleId=106370&

* docType=1#s3

*/

public void app_pay_notify() {

try {

// 獲取支付寶POST過(guò)來(lái)反饋信息

Map params = AliPayApi.toMap(getRequest());

for (Map.Entry entry : params.entrySet()) {

System.out.println(entry.getKey() + " = " + entry.getValue());

}

// 切記alipaypublickey是支付寶的公鑰冤馏,請(qǐng)去open.alipay.com對(duì)應(yīng)應(yīng)用下查看。

// boolean AlipaySignature.rsaCheckV1(Map params,

// String publicKey, String charset, String sign_type)

boolean flag = AlipaySignature.rsaCheckV1(params, AliPayApi.ALIPAY_PUBLIC_KEY, AliPayApi.CHARSET,

AliPayApi.SIGN_TYPE);

if (flag) {

// TODO

System.out.println("success");

renderText("success");

return;

} else {

// TODO

System.out.println("failure");

renderText("failure");

}

} catch (AlipayApiException e) {

e.printStackTrace();

renderText("failure");

}

}

將異步通知的參數(shù)轉(zhuǎn)化為Map

/**

* 將異步通知的參數(shù)轉(zhuǎn)化為Map

* @param request

* @return

*/

public static Map toMap(HttpServletRequest request) {

System.out.println(">>>>" + request.getQueryString());

Map params = new HashMap();

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)亂碼時(shí)使用逮光。

// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");

params.put(name, valueStr);

}

return params;

}

5代箭、客戶端實(shí)現(xiàn)

客戶端請(qǐng)求此action返回orderInfo,默認(rèn)的訪問(wèn)地址為http://[域名或者IP]:端口號(hào)/[項(xiàng)目名稱]/alipay/appPay

成功將返回:

{

"code": 0,

"data": "charset=utf-8&biz_content=%7B%22out_trade_no%22%3A%22120822453414812%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22passback_params%22%3A%22123%22%7D&method=alipay.trade.app.pay&format=json?ify_url=http%3A%2F%2Fjaven.ittun.com%2Falipay%2Fpay_notify&app_id=2016102000727659&sign_type=RSA&version=1.0×tamp=2016-12-08+22%3A45%3A34&sign=m6fpNI58jkOIHROtm8Q2V1Ei7bxXc14JHtJEeqGM0B8dWlq3d%2FfAqpoQTZgeBb%2FVK%2B%2BydOJzVvSWc89dBxhYUq72KOeUwHiKlRJBFMnEMAZbJlRxqu9%2BRX2q7HSRmA6WRg75O68HZhkIhtO3bSNx3s710tMHmQCN230JoVWiwHw%3D",

"message": null

}

/**

* 獲取支付寶App支付訂單信息

* @return

*/

public String getAliPayOrderInfo(Order order){

String result=HttpKit.get(Constants.ALIPAY_URL);

return result;

}

異步獲取orderInfo

public class AliPay extends AsyncTask {

private Activity mContext;

public AliPay(Activity context) {

this.mContext = context;

}

@Override

protected String doInBackground(Object... params) {

return? IPayLogic.getIntance(mContext).getAliPayOrderInfo((Order)params[0]);

}

@Override

protected void onPostExecute(String result) {

try {

if (result!=null) {

System.out.println("AliPay result>"+result);

JSONObject data = new JSONObject(result);

String message = data.getString("message");

int code = data.getInt("code");

if(code == 0){

String orderInfo = data.getString("data");

Toast.makeText(mContext, "正在調(diào)起支付", Toast.LENGTH_SHORT).show();

IPayLogic.getIntance(mContext).startAliPay(orderInfo);

}else{

Log.d("PAY_GET", "返回錯(cuò)誤"+message);

//? ? ? ? ? ? ? ? ? ? Toast.makeText(mContext, "返回錯(cuò)誤:"+message, Toast.LENGTH_SHORT).show();

}

}else {

System.out.println("get? AliPay exception, is null");

}

} catch (Exception e) {

Log.e("PAY_GET", "異常:"+e.getMessage());

Toast.makeText(mContext, "異常:"+e.getMessage(), Toast.LENGTH_SHORT).show();

}

super.onPostExecute(result);

}

}

支付接口調(diào)用

public void startAliPay(final String orderInfo){

Runnable payRunnable = new Runnable() {

@Override

public void run() {

PayTask alipay = new PayTask(mContext);

Map result = alipay.payV2(orderInfo, true);

Message msg = new Message();

msg.obj = result;

mHandler.sendMessage(msg);

}

};

Thread payThread = new Thread(payRunnable);

payThread.start();

}

客戶端通過(guò)回調(diào)函數(shù)獲取支付結(jié)果

private Handler mHandler = new Handler(Looper.getMainLooper()) {

@SuppressWarnings("unchecked")

public void handleMessage(Message msg) {

PayResult payResult = new PayResult((Map) msg.obj);

System.out.println("alipay call "+payResult.toString());

String resultStatus = payResult.getResultStatus();

String memo = payResult.getMemo();

if (Constants.payListener !=null){

//返回狀態(tài)以及詳細(xì)的描述參考

// https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.xN1NnL&treeId=204&articleId=105302&docType=1

Constants.payListener.onPay(-2,resultStatus,memo);

}

}

};

客戶端具體使用方法

public void testAliPay(View view){

Toast.makeText(this, "支付寶測(cè)試", Toast.LENGTH_SHORT).show();

Order order = new Order();

order.setBody("會(huì)員充值中心");

order.setParaTradeNo(System.currentTimeMillis()+"");

order.setTotalFee(20);

order.setAttach("json");//附加參數(shù)

order.setNofityUrl("http://www.xxxx.com");//支付成功服務(wù)端回調(diào)通知的地址

IPay.getIntance(MainActivity.this).toPay(IPay.PayMode.ALIPAY,order,new IPay.IPayListener() {

@Override

public void onPay(int wxcode, String alicode, String message) {

System.out.println("回調(diào)過(guò)來(lái)的狀態(tài)》"+alicode+" message>"+((message!=null && message.isEmpty())?"":message));

Toast.makeText(MainActivity.this, "回調(diào)過(guò)來(lái)的狀態(tài)》" + alicode, Toast.LENGTH_SHORT).show();

}

});

}

6涕刚、常見(jiàn)錯(cuò)誤解決方案

APP支付報(bào)錯(cuò)ALI40247處理方案

ALI40247的錯(cuò)誤

有2種情況 1嗡综、沒(méi)有權(quán)限 2、簽名失敗

可以查看論壇提供的這個(gè)解決方案

AL38173的錯(cuò)誤一般是參數(shù)問(wèn)題造成的,建議檢查請(qǐng)求參數(shù)杜漠,對(duì)照文檔查看极景,比如:參數(shù)少了、多了驾茴、亂碼盼樟、名稱不對(duì),還有必傳參數(shù)是否都請(qǐng)求提交給支付寶了等等.

如果在網(wǎng)上查閱質(zhì)料還未解決锈至,可以尋求阿里的在線支持【支持中心

此項(xiàng)目已開(kāi)源 趕快來(lái)圍觀 Start支持下吧

客戶端開(kāi)源地址-JPay】【服務(wù)端端開(kāi)源地址-在com.javen.alipay包名下

作者:Javen205

鏈接:http://www.reibang.com/p/3d91248aea4b

來(lái)源:簡(jiǎn)書(shū)

著作權(quán)歸作者所有晨缴。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處峡捡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喜庞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棋返,更是在濱河造成了極大的恐慌延都,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睛竣,死亡現(xiàn)場(chǎng)離奇詭異晰房,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)射沟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門殊者,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人验夯,你說(shuō)我怎么就攤上這事猖吴。” “怎么了挥转?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵海蔽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绑谣,道長(zhǎng)党窜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任借宵,我火速辦了婚禮幌衣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壤玫。我一直安慰自己豁护,他們只是感情好哼凯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著楚里,像睡著了一般挡逼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腻豌,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天家坎,我揣著相機(jī)與錄音,去河邊找鬼吝梅。 笑死虱疏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苏携。 我是一名探鬼主播做瞪,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼右冻!你這毒婦竟也來(lái)了装蓬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纱扭,失蹤者是張志新(化名)和其女友劉穎牍帚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乳蛾,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暗赶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肃叶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹂随。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖因惭,靈堂內(nèi)的尸體忽然破棺而出岳锁,到底是詐尸還是另有隱情,我是刑警寧澤蹦魔,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布激率,位于F島的核電站,受9級(jí)特大地震影響版姑,放射性物質(zhì)發(fā)生泄漏柱搜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一剥险、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宪肖,春花似錦表制、人聲如沸健爬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娜遵。三九已至,卻和暖如春壤短,著一層夾襖步出監(jiān)牢的瞬間设拟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工久脯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纳胧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓帘撰,卻偏偏與公主長(zhǎng)得像跑慕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摧找,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 支付寶出了新文檔 現(xiàn)在才知道 記載一下新版與舊版區(qū)別 1 訂單信息生成 舊版當(dāng)中訂單信息生成內(nèi)容較多 簽名在...
    云沐天閱讀 1,768評(píng)論 0 5
  • 支付寶集成過(guò)程詳解——運(yùn)行DEMO 前言核行,夢(mèng)想是需要堅(jiān)持的,在路上蹬耘,一路前行芝雪。加油。 這兩天軟件需要集成支付寶了综苔,...
    改昵稱已被占用閱讀 19,029評(píng)論 2 39
  • 一绵脯、準(zhǔn)備工作 〉1、下載開(kāi)發(fā)包 https://doc.open.alipay.com/docs/doc.htm?...
    丶Lost_Deer閱讀 2,481評(píng)論 0 10
  • 之前寫(xiě)了一個(gè)關(guān)于微信支付的博文休里,后來(lái)有人問(wèn)我為什么不寫(xiě)上一個(gè)支付寶支付的呢蛆挫。當(dāng)初想的是支付寶支付比較簡(jiǎn)單,不像微信...
    2c2z0閱讀 2,076評(píng)論 0 0
  • 前幾天妙黍,因?yàn)橐淮螌W(xué)習(xí)的機(jī)會(huì)我離大姑母所在城市只有百余里悴侵,我特意去看望了我的大姑母。如今大姑母已是耄耋老人拭嫁,臨行前爸...
    黑龍江冷月閱讀 461評(píng)論 0 2