发表时间:2022-03-26来源:网络
针对需要在IOS手机上接入原生微信支付宝场景,调用支付宝。如图:
打开https://openhome.alipay.com,注册支付宝开放平台开发者账号
登录,进入开发者中心,进行开发者资质认证,并创建移动应用。
创建应用后上传相关资料,上线应用并通过审核。审核通过后点击应用,进行签约,此步骤不能省略,否则或报ISV权限不足。
打开应用信息,配置一下内容,接口签名可下载支付宝签名验签工具进行生成,生成完成后将公钥复制到平台上。
添加依赖
1 [html] view plain copy 2 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 copy 2 3 print? 4 /** 5 * account 总金额 6 * sid 用户id 7 * desc 节点id 8 * @param request 9 * @return 10 */ 11 @Re(value="/pay/alipay/signprams",produces="application/json;") 12 @ResponseBody 13 public String 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 = .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 = new AlipayTradeAppPayRequest(); 31 //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 32 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); 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 = new JSONObject(); 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 return res; 67 }
异步通知处理
[java] view plain copy print? @Re(value="/pay/alipay/notify",produces="application/json;charset=utf-8") @ResponseBody public String notify(HttpServletRequest request){ Map re = request.getParameterMap(); System.out.println("支付宝支付结果通知"+re.toString()); //获取支付宝POST过来反馈信息 Map params = new HashMap(); for (Iterator iter = re.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) re.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"; }
导入支付宝开发包
添加URL Types
在需要调用支付宝的地方实现方法
[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 re:url]; AFHTTPRe *operation = [[AFHTTPRe alloc]initWithRequest:request]; [operation setCompletionBlockWithSuccess:^(AFHTTPRe *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 isE:@"9000"]){ // 支付成功,更新用户信息 [self payDidFinish]; }else{ // 支付失败, [self setupAlertControllerWithTitle:@"支付宝支付结果" messge:@"本次支付未完成,您可以稍后重试!" confirm:@"好的"]; } }]; }failure:^(AFHTTPRe *operation, NSError *error) { [MBProgressHUD hideHUD]; NSLog(@"发生错误!%@",error); }]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperation:operation]; }
个人实例~~
1.点击支付按钮
1 - (void)alipayBtnClick{ 2 3 [HWSShopCartHttpRequst reyWithOrderNo:self.orderNo Success:^(NSString *code, NSDictionary *dataDic) { 4 5 NSString *paramsStr = dataDic[@"re"]; 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)reyWithOrderNo:(NSString*)orderNo 9 Success:(void (^)(NSString *code,NSDictionary *dataDic))success andFailure:(void(^)(void))failure 10 { 11 12 [KSHttpRequest post:[NSString stringWithFormat:@"%@%@",HOST,aliPay] parameters:@{@"orderNo":orderNo} success:^(id result) { 13 14 if ([result[@"code"] isE:@"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/
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14