java ios支付接口开发_支付宝APP支付IOS手机端java后台版

本文详细介绍了如何实现Java后台与iOS客户端集成支付宝APP支付接口的过程。包括在支付宝开放平台注册、资质认证、签约应用、配置应用信息、Java后台添加依赖、生成统一订单及异步通知处理的方法。此外,还提到了iOS客户端导入支付宝SDK、设置URL Types以及调用支付方法的步骤。
摘要由CSDN通过智能技术生成

支付宝APP支付(IOS手机端+java后台)版

0.介绍预览

针对需要在IOS手机上接入原生微信支付宝场景,调用支付宝。如图:

1ba85a473b0c18bce077b1666db73f07.png              

5c6d5d0fdc9dd5c65cae01315b326f3c.png

1.资料准备

1.1 账号注册

打开https://openhome.alipay.com,注册支付宝开放平台开发者账号

1.2 开发者认证

登录,进入开发者中心,进行开发者资质认证,并创建移动应用。

1.3 签约应用

创建应用后上传相关资料,上线应用并通过审核。审核通过后点击应用,进行签约,此步骤不能省略,否则或报ISV权限不足。

47313510f9c620ce541167af75d62c88.png

1.4 应用配置

打开应用信息,配置一下内容,接口签名可下载支付宝签名验签工具进行生成,生成完成后将公钥复制到平台上。

18219ef79beb6c8a3e0e3d058abf7e92.png

2.Java后台开发

添加依赖

1 [html] view plain copy2

3 print?4

5

6 com.pentahohub.nexus

7 alipay-sdk-java

8 20170615110434

9 system

10 ${basedir}/libs/alipay-sdk-java20170615110434.jar

11

12

13 commons-logging

14 commons-logging

15 1.1.1

16

生成统一订单

1 [java] view plain copy2

3 print?

4 /**

5 * account 总金额6 * sid 用户id7 * desc 节点id8 *@paramrequest9 *@return

10 */

11 @RequestMapping(value="/pay/alipay/signprams",produces="application/json;charset=utf-8")12 @ResponseBody13 publicString signprams(HttpServletRequest request){14 String res = "{code:404}";15 try{16 String totalAmount = request.getParameter("account");17 String sid = request.getParameter("sid");18 String nid = request.getParameter("desc");19 String subject = "电费充值";20 String body = "贵大电费预付费充值";21 String prefix = "ALE"+sid+"E";22 String out_trade_no =WXRequestUtil.getTradeNo(prefix);23

24 //实例化客户端

25 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do

26

27 ",

28 AlipayUtil.APPID, AlipayUtil.PRIVATE_KEY, "json", AlipayUtil.CHARSET, AlipayUtil.PUBLIC_KEY, "RSA2");29 //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay

30 AlipayTradeAppPayRequest alirequest = newAlipayTradeAppPayRequest();31 //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。

32 AlipayTradeAppPayModel model = newAlipayTradeAppPayModel();33 model.setPassbackParams(URLEncoder.encode(body.toString()));; //描述信息 添加附加数据

34 model.setSubject(subject); //商品标题

35 model.setOutTradeNo(out_trade_no); //商家订单编号

36 model.setTimeoutExpress("30m"); //超时关闭该订单时间

37 model.setTotalAmount(totalAmount); //订单总金额

38 model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY

39 alirequest.setBizModel(model);40 alirequest.setNotifyUrl("http://pay.gzdxfszx.com/pay/alipay/notify.xs

41

42 "); //回调地址

43 String orderStr = "";44 try{45 //这里和普通的接口调用不同,使用的是sdkExecute

46 AlipayTradeAppPayResponse response =alipayClient.sdkExecute(alirequest);47 orderStr =response.getBody();48 //System.out.println(orderStr);//就是orderString 可以直接给客户端请求,无需再做处理。

49 } catch(AlipayApiException e) {50 e.printStackTrace();51 }52

53 String sign =MD5Encode.encode(out_trade_no);54 savePayLog(out_trade_no,totalAmount,sid,body, sign,nid,1);55

56 JSONObject resObj = newJSONObject();57 resObj.put("code",ResponseCode.HTTP_SUCCESS);58 resObj.put("out_trade_no",out_trade_no);59 resObj.put("sign",sign);60 resObj.put("orderStr",orderStr);61

62 res =resObj.toJSONString();63 }catch(Exception e){64 e.printStackTrace();65 }66 returnres;67 }

异步通知处理

[java] view plain copy

print?@RequestMapping(value="/pay/alipay/notify",produces="application/json;charset=utf-8")

@ResponseBodypublicString notify(HttpServletRequest request){

Map requestParams=request.getParameterMap();

System.out.println("支付宝支付结果通知"+requestParams.toString());//获取支付宝POST过来反馈信息

Map params = new HashMap();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] + ",";

}//乱码解决,这段代码在出现乱码时使用。//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");

params.put(name, valueStr);

}//切记alipaypublickey是支付宝的公钥,请去open.alipay.com

对应应用下查看。//boolean AlipaySignature.rsaCheckV1(Map params, String publicKey, String charset, String sign_type)

try{//验证签名

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");// //支付宝交易号//String trade_no = params.get("trade_no");// //附加数据//String passback_params = URLDecoder.decode(params.get("passback_params"));//商户订单号

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客户端开发

导入支付宝开发包

f86dc53e4276ddfc7a327a095183b356.png

添加URL Types

c1ac198d123c1f0271d3e640865e233b.png

在需要调用支付宝的地方实现方法

[objc] view plain copy

print?

-(void)aliPay

{

[MBProgressHUD showMessage:@"跳转中,请稍候"];

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:@"支付宝支付结果" messge:@"本次支付未完成,您可以稍后重试!" confirm:@"好的"];

}

}];

}failure:^(AFHTTPRequestOperation *operation, NSError *error) {

[MBProgressHUD hideHUD];

NSLog(@"发生错误!%@",error);

}];

NSOperationQueue*queue =[[NSOperationQueue alloc] init];

[queue addOperation:operation];

}

个人实例~~

1.点击支付按钮

1 - (void)alipayBtnClick{2

3 [HWSShopCartHttpRequst requestOrderPayUseAliPayWithOrderNo:self.orderNo Success:^(NSString *code, NSDictionary *dataDic) {4

5 NSString *paramsStr = dataDic[@"requestParams"];6 [[AlipaySDK defaultService] payOrder:paramsStr fromScheme:kAppScheme callback:^(NSDictionary *resultDic) {7 NSLog(@"reslut = %@",resultDic);8 }];9

10 } andFailure:^{11

12 }];13

14 }

2.请求内部封装的代码实例

1 /**2 * 统一下单支付宝支付3 * @param orderNo 订单编号4 *5 * @param success 成功6 * @param failure 失败7 */

8 + (void)requestOrderPayUseAliPayWithOrderNo:(NSString*)orderNo9 Success:(void (^)(NSString *code,NSDictionary *dataDic))success andFailure:(void(^)(void))failure10 {11

12 [KSHttpRequest post:[NSString stringWithFormat:@"%@%@",HOST,aliPay] parameters:@{@"orderNo":orderNo} success:^(idresult) {13

14 if ([result[@"code"] isEqualToString:@"1000"]) {15

16 NSLog(@"%@",result);17

18 NSDictionary *dataDic = result[@"data"];19 success(result[@"code"],dataDic);20

21 }else{22 failure();23 [MBProgressHUD showMessage:result[@"message"]];24 }25

26 } failure:^(NSError *error) {27 failure();28 }];29 }

//待续

https://docs.open.alipay.com/204/105295/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值