最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

支付寶APP支付(IOS手機(jī)端+java后臺(tái))版

 更新時(shí)間:2019年05月05日 09:22:09   作者:只要你能好  
這篇文章主要為大家詳細(xì)介紹了支付寶APP支付(IOS手機(jī)端+java后臺(tái))版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

0.介紹預(yù)覽

針對(duì)需要在IOS手機(jī)上接入原生微信支付場(chǎng)景,調(diào)用微信進(jìn)行支付。如圖:

1.資料準(zhǔn)備

1.1 賬號(hào)注冊(cè)

打開https://openhome.alipay.com,注冊(cè)支付寶開放平臺(tái)開發(fā)者賬號(hào)

1.2 開發(fā)者認(rèn)證

登錄,進(jìn)入開發(fā)者中心,進(jìn)行開發(fā)者資質(zhì)認(rèn)證,并創(chuàng)建移動(dòng)應(yīng)用。

1.3 簽約應(yīng)用

創(chuàng)建應(yīng)用后上傳相關(guān)資料,上線應(yīng)用并通過審核。審核通過后點(diǎn)擊應(yīng)用,進(jìn)行簽約,此步驟不能省略,否則或報(bào)ISV權(quán)限不足。

1.4 應(yīng)用配置

打開應(yīng)用信息,配置一下內(nèi)容,接口簽名可下載支付寶簽名驗(yàn)簽工具進(jìn)行生成,生成完成后將公鑰復(fù)制到平臺(tái)上。

2.Java后臺(tái)開發(fā)

添加依賴

<!-- 支付寶支付依賴 -->
<dependency>
 <groupId>com.pentahohub.nexus</groupId>
 <artifactId>alipay-sdk-java</artifactId>
 <version>20170615110434</version>
 <scope>system</scope>
 <systemPath>${basedir}/libs/alipay-sdk-java20170615110434.jar</systemPath>
</dependency>
<dependency>
 <groupId>commons-logging</groupId>
 <artifactId>commons-logging</artifactId>
 <version>1.1.1</version>
</dependency>

生成統(tǒng)一訂單

/**
* account 總金額
* sid 用戶id
* desc 節(jié)點(diǎn)id
* @param request
* @return
*/
@RequestMapping(value="/pay/alipay/signprams",produces="application/json;charset=utf-8")
@ResponseBody
public String signprams(HttpServletRequest request){
String res = "{code:404}";
try{
 String totalAmount = request.getParameter("account");
 String sid = request.getParameter("sid");
 String nid = request.getParameter("desc");
 String subject = "電費(fèi)充值";
 String body = "貴大電費(fèi)預(yù)付費(fèi)充值";
 String prefix = "ALE"+sid+"E";
 String out_trade_no = WXRequestUtil.getTradeNo(prefix);
 
 //實(shí)例化客戶端
 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do 
",
 AlipayUtil.APPID, AlipayUtil.PRIVATE_KEY, "json", AlipayUtil.CHARSET, AlipayUtil.PUBLIC_KEY, "RSA2");
 //實(shí)例化具體API對(duì)應(yīng)的request類,類名稱和接口名稱對(duì)應(yīng),當(dāng)前調(diào)用接口名稱:alipay.trade.app.pay
 AlipayTradeAppPayRequest alirequest = new AlipayTradeAppPayRequest();
 //SDK已經(jīng)封裝掉了公共參數(shù),這里只需要傳入業(yè)務(wù)參數(shù)。以下方法為sdk的model入?yún)⒎绞?model和biz_content同時(shí)存在的情況下取biz_content)。
 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
 model.setPassbackParams(URLEncoder.encode(body.toString()));; //描述信息 添加附加數(shù)據(jù)
 model.setSubject(subject); //商品標(biāo)題
 model.setOutTradeNo(out_trade_no); //商家訂單編號(hào)
 model.setTimeoutExpress("30m"); //超時(shí)關(guān)閉該訂單時(shí)間
 model.setTotalAmount(totalAmount); //訂單總金額
 model.setProductCode("QUICK_MSECURITY_PAY"); //銷售產(chǎn)品碼,商家和支付寶簽約的產(chǎn)品碼,為固定值QUICK_MSECURITY_PAY
 alirequest.setBizModel(model);
 alirequest.setNotifyUrl("http://pay.gzdxfszx.com/pay/alipay/notify.xs 
"); //回調(diào)地址
 String orderStr = "";
 try {
 //這里和普通的接口調(diào)用不同,使用的是sdkExecute
 AlipayTradeAppPayResponse response = alipayClient.sdkExecute(alirequest);
 orderStr = response.getBody();
//  System.out.println(orderStr);//就是orderString 可以直接給客戶端請(qǐng)求,無需再做處理。
 } catch (AlipayApiException e) {
 e.printStackTrace();
 }
 
 String sign = MD5Encode.encode(out_trade_no);
 savePayLog(out_trade_no,totalAmount,sid,body, sign,nid,1);
 
 JSONObject resObj = new JSONObject();
 resObj.put("code",ResponseCode.HTTP_SUCCESS);
 resObj.put("out_trade_no",out_trade_no);
 resObj.put("sign",sign);
 resObj.put("orderStr",orderStr);
 
 res = resObj.toJSONString();
}catch (Exception e){
 e.printStackTrace();
}
return res;
}

異步通知處理

@RequestMapping(value="/pay/alipay/notify",produces="application/json;charset=utf-8")
 @ResponseBody
 public String notify(HttpServletRequest request){
 Map requestParams = request.getParameterMap();
 System.out.println("支付寶支付結(jié)果通知"+requestParams.toString());
 //獲取支付寶POST過來反饋信息
 Map<String,String> params = new HashMap<String,String>();
 
 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);
 }
 //切記alipaypublickey是支付寶的公鑰,請(qǐng)去open.alipay.com 
 
對(duì)應(yīng)應(yīng)用下查看。
 //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
 try {
  //驗(yàn)證簽名
  boolean flag = AlipaySignature.rsaCheckV1(params, AlipayUtil.PUBLIC_KEY, AlipayUtil.CHARSET, "RSA2");
  if(flag){
  if("TRADE_SUCCESS".equals(params.get("trade_status"))){
//   //付款金額
//   String amount = params.get("buyer_pay_amount");
//   //支付寶交易號(hào)
//   String trade_no = params.get("trade_no");
//   //附加數(shù)據(jù)
//   String passback_params = URLDecoder.decode(params.get("passback_params"));
 
   //商戶訂單號(hào)
   String out_trade_no = params.get("out_trade_no");
   updateOrderInfo(out_trade_no,MD5Encode.encode(out_trade_no));
  }
  }
 } catch (AlipayApiException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return "success";
 }

3.IOS客戶端開發(fā)

導(dǎo)入支付寶開發(fā)包

添加URL Types

在需要調(diào)用支付寶的地方實(shí)現(xiàn)方法

-(void)aliPay
{
 [MBProgressHUD showMessage:@"跳轉(zhuǎn)中,請(qǐng)稍候"];
 NSString *appScheme = @"alisdkdemo";
 
 NSString *userUrlStr = [NSString stringWithFormat:@"%@?sid=%@&account=%@&desc=%@", ALI_PREPAY_URL, self.student.sid,self.payJinE,self.student.nid];
 NSURL *url = [NSURL URLWithString:userUrlStr];
 // NSLog(@"userUrlStr = %@", userUrlStr);
 
 NSURLRequest *request = [NSURLRequest requestWithURL:url];
 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
 
 [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
 [MBProgressHUD hideHUD];
 
//   NSLog(@"支付寶支付的response = %@", operation.responseString);
 NSData *JSONData = [operation.responseString dataUsingEncoding:NSUTF8StringEncoding];
 NSDictionary *userDict = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableLeaves error:nil];
 
 NSString *orderString = [userDict objectForKey:@"orderStr"];
 self.sign = [userDict objectForKey:@"sign"];
 self.ordnum = [userDict objectForKey:@"out_trade_no"];
 
 [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
  NSLog(@"reslut = %@",resultDic);
  [MBProgressHUD hideHUD];
  
  NSString *resultStatus = [resultDic objectForKey:@"resultStatus"];
  if([resultStatus isEqualToString:@"9000"]){
  // 支付成功,更新用戶信息
  [self payDidFinish];
  }else{
  // 支付失敗,
  [self setupAlertControllerWithTitle:@"支付寶支付結(jié)果" messge:@"本次支付未完成,您可以稍后重試!" confirm:@"好的"];
  }
  
 }];
 }failure:^(AFHTTPRequestOperation *operation, NSError *error) {
 [MBProgressHUD hideHUD];
 NSLog(@"發(fā)生錯(cuò)誤!%@",error);
 }];
 NSOperationQueue *queue = [[NSOperationQueue alloc] init];
 [queue addOperation:operation];
 
 
 
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)

    shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)

    這篇文章主要為大家介紹了shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Jackson自定義序列化與反序列化注解詳解

    Jackson自定義序列化與反序列化注解詳解

    這篇文章主要介紹了Jackson自定義序列化與反序列化注解詳解,某些場(chǎng)景下,我們使用Jackson對(duì)數(shù)據(jù)進(jìn)行序列化或反序列化的時(shí)候,需要對(duì)某些數(shù)據(jù)進(jìn)行特殊處理,需要的朋友可以參考下
    2023-11-11
  • SpringBoot3 RestTemplate配置與使用詳解

    SpringBoot3 RestTemplate配置與使用詳解

    本文詳細(xì)介紹了在 SpringBoot 3.x 中如何配置和使用 RestTemplate,包括基本配置、高級(jí)配置以及各種使用場(chǎng)景,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn)

    SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot2 集成log4j2日志框架的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • SpringBoot Security實(shí)現(xiàn)單點(diǎn)登出并清除所有token

    SpringBoot Security實(shí)現(xiàn)單點(diǎn)登出并清除所有token

    Spring Security是一個(gè)功能強(qiáng)大且高度可定制的身份驗(yàn)證和訪問控制框架。提供了完善的認(rèn)證機(jī)制和方法級(jí)的授權(quán)功能。是一款非常優(yōu)秀的權(quán)限管理框架。它的核心是一組過濾器鏈,不同的功能經(jīng)由不同的過濾器
    2023-01-01
  • Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析

    Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析

    這篇文章主要介紹了Java實(shí)現(xiàn)Android拼圖游戲設(shè)計(jì)過程解析,下面文章要接受的這是一款基于 Java 開發(fā)的移動(dòng)端安卓小游戲,可以作為大家在學(xué)習(xí)期間的一個(gè)小練習(xí),接下來和小編一起進(jìn)入文章學(xué)習(xí)具體內(nèi)容吧
    2022-02-02
  • java網(wǎng)絡(luò)編程之群聊功能

    java網(wǎng)絡(luò)編程之群聊功能

    這篇文章主要為大家詳細(xì)介紹了java網(wǎng)絡(luò)編程之群聊功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java 多線程并發(fā)AbstractQueuedSynchronizer詳情

    Java 多線程并發(fā)AbstractQueuedSynchronizer詳情

    這篇文章主要介紹了Java 多線程并發(fā)AbstractQueuedSynchronizer詳情,文章圍繞主題展開想象的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • mybatis如何批量更新list對(duì)象

    mybatis如何批量更新list對(duì)象

    這篇文章主要介紹了mybatis如何批量更新list對(duì)象問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 淺談java中Map的用法

    淺談java中Map的用法

    Map簡介:將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射到一個(gè)值。此接口取代 Dictionary 類,后者完全是一個(gè)抽象類,而不是一個(gè)接口。
    2015-09-09

最新評(píng)論

连平县| 军事| 会泽县| 佛冈县| 商城县| 塔城市| 彩票| 乌恰县| 霍州市| 盱眙县| 来安县| 襄汾县| 拜城县| 兴山县| 镇赉县| 团风县| 隆尧县| 黔江区| 绍兴市| 卢龙县| 保康县| 寻甸| 个旧市| 遂溪县| 搜索| 赤壁市| 区。| 内乡县| 三河市| 肥城市| 金沙县| 疏勒县| 西盟| 精河县| 隆尧县| 东乡县| 石渠县| 出国| 河北区| 广灵县| 库尔勒市|