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

0.介绍预览

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

1.资料准备

1.1 账号注册

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

1.2 开发者认证

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

1.3 签约应用

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

1.4 应用配置

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

2.Java后台开发

添加依赖

<!-- 支付宝支付依赖 -->
<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>

生成统一订单

/**
* account 总金额
* sid 用户id
* desc 节点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 = "电费充值";
 String body = "贵大电费预付费充值";
 String prefix = "ALE"+sid+"E";
 String out_trade_no = WXRequestUtil.getTradeNo(prefix);

 //实例化客户端
 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do
",
 AlipayUtil.APPID, AlipayUtil.PRIVATE_KEY, "json", AlipayUtil.CHARSET, AlipayUtil.PUBLIC_KEY, "RSA2");
 //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
 AlipayTradeAppPayRequest alirequest = new AlipayTradeAppPayRequest();
 //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
 model.setPassbackParams(URLEncoder.encode(body.toString()));; //描述信息 添加附加数据
 model.setSubject(subject); //商品标题
 model.setOutTradeNo(out_trade_no); //商家订单编号
 model.setTimeoutExpress("30m"); //超时关闭该订单时间
 model.setTotalAmount(totalAmount); //订单总金额
 model.setProductCode("QUICK_MSECURITY_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
 alirequest.setBizModel(model);
 alirequest.setNotifyUrl("http://pay.gzdxfszx.com/pay/alipay/notify.xs
"); //回调地址
 String orderStr = "";
 try {
 //这里和普通的接口调用不同,使用的是sdkExecute
 AlipayTradeAppPayResponse response = alipayClient.sdkExecute(alirequest);
 orderStr = response.getBody();
//  System.out.println(orderStr);//就是orderString 可以直接给客户端请求,无需再做处理。
 } 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("支付宝支付结果通知"+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] + ",";
  }
  //乱码解决,这段代码在出现乱码时使用。
  //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
  params.put(name, valueStr);
 }
 //切记alipaypublickey是支付宝的公钥,请去open.alipay.com 

对应应用下查看。
 //boolean AlipaySignature.rsaCheckV1(Map<String, String> 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客户端开发

导入支付宝开发包

添加URL Types

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

-(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];

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    最近项目APP需要接入微信.支付宝支付功能,在分配开发任务时,听说微信支付接口比支付宝支付接口要难实现,由于我开发经验不是那么丰富(现工作经验1年半)且未接触过支付接口开发,组里刚好又有支付接口的老司机,所以很自然把简单的支付宝接口开发任务交给了我,看来开发组的组长还是很好人的嘛.....,废话就不多说了,我们开始吧! 实现支付宝接口详细过程 1.去支付宝官网申请公司企业账号并开通一个应用,在应用里签约APP支付功能 具体的申请截图步骤,在这里我就不详细说了,因为这不是文章的重点,可参考支付宝官

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

    0.介绍预览 针对需要在IOS手机上接入原生微信支付场景,调用微信进行支付.如图: 1.资料准备 1.1 账号注册 打开https://openhome.alipay.com,注册支付宝开放平台开发者账号 1.2 开发者认证 登录,进入开发者中心,进行开发者资质认证,并创建移动应用. 1.3 签约应用 创建应用后上传相关资料,上线应用并通过审核.审核通过后点击应用,进行签约,此步骤不能省略,否则或报ISV权限不足. 1.4 应用配置 打开应用信息,配置一下内容,接口签名可下载支付宝签名验签工具进

  • 微信APP支付(IOS手机端+java后台)版

    0.介绍预览 针对需要在IOS手机上接入原生微信支付场景,调用微信进行支付.如图: 1.资料准备 1.1 账号注册 打开https://open.weixin.qq.com,注册微信开放平台开发者账号 1.2 开发者认证 登录,进入账号中心,进行开发者资质认证. 1.3 注册应用 认证完成后,进入管理中心,新建移动应用.填写应用资料,其中android版应用签名可通过扫码安装温馨提供的应用获得,详细参考微信文档.创建完成后点击查看,申请开通微信支付.一切准备就绪! 2.Java后台开发 添加依赖

  • php 服务端集成支付宝APP支付实例

    支付宝支付分为了很多种场景,这里只讲述支付宝APP支付功能集成,期间遇到了特别大的坑,因此我简单描述下集成过程,并概述遇到的问题及解决方案 由于公司业务简单,只支持支付宝支付,而无需关心退款,查询等等额外功能,因此该篇内容仅仅讲述支付宝支付接口时服务端如何准备APP拉取支付订单的信息,大概流程如下 一.创建应用及配置 首先,需要到蚂蚁金服开发平台(open.alipay.com)注册应用,并获取应用ID,并配置应用,这里在配置时主要是签约,生成应用的RSA2公私钥,同时获取到支付宝提供的支付公钥

  • SpringBoot整合支付宝APP支付

    前言 现在是移动端产品疯狂的年代,随之,移动端支付也是热门小技能,最近本公司在做一个移动端,要接入微信支付和支付宝支付,老习惯,功能做完之后做个复盘记录,这边主要讲解支付宝APP支付 所需条件 1.创建蚂蚁金服开放平台公司账号 2.选择开发中心---->移动应用 3.选择支付接入 4.创建应用 5.查看应用appId 6.添加功能 两个功能:支付宝授权功能和APP支付功能 7.功能签约 开发流程 引入支付宝支付SDK <!-- 支付宝支付 SDK --> <dependency&g

  • php支付宝APP支付功能

    本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 支付宝网页支付 1.支付宝开放平台添加应用,获得appid,并签约. 2.在支付宝开放品台设置如下: 3.配置支付宝的应用公钥.(根据支付宝的文档) 4.在开放平台下载官方sdk demo. 5.代码: //支付宝 include_once VENDOR_PATH . 'Alipay/aop/AopClient.php'; include_once VENDOR_PATH . 'Alipay/aop/reque

  • Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

    一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一. 笔者在此总结了下阿里旗下支付宝Android SDK支付的接入流程,供后来者参考. 接入流程如下: 1 签约成为支付宝商户 签约地址:https://b.alipay.com/, 只有成为签约商户的开发者才能具备集成支付宝app支付的资格. 签约资料:1)营业执照 2)APP说明文档 3)商户经营信息.商户联系人等信息 必要时还需提供A

  • PHP 实现手机端APP支付宝支付功能

    最近应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在蚂蚁金服开放平台创建应用,签约商户,生成应用公钥和私钥: 2.配置统一下单支付参数: 3.整合支付宝demo类文件: 4.创建Alipay支付类,类内创建两个方法(alipay_app:统一下单方法和alipay_notify:支付成功异步回调方法); 第一步主要是在蚂蚁金服开放平台登录你的支付

  • 详解APP微信支付(java后台_统一下单和回调)

    1.微信配置信息 global.properties 2.方法wxpay用于生成预支付订单信息 方法notifyWeiXinPay用于微信支付成功后的回调, 注意: 在手机端使用微信支付成功后,微信服务器会根据提供的回调地址进行回调, parameterMap.put("notify_url", wxnotify); (见下面代码) 在局域网是无法进行回调的,必须将你的服务端放在公网上进行测试, 回调函数会被多次调用,如果第一次成功后,你可以将业务数据状态标志为已处理, 对于相同订单的

  • java服务端微信APP支付接口详解

    一.微信APP支付接入商户服务中心 [申请流程指引] (https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317780&token=84f23b4e9746c5963128711f225476cfd49ccf8c&lang=zh_CN) 二.开始开发 1.配置相关的配置信息 1.1.配置appid(Androi

随机推荐