最近做了支付宝扫码付款:废话不多说:下面开始:

1:开通支付宝商家,登录支付宝开放平台,创建应用-

2、设置应用的私钥和公钥,每个应用都有自己的私钥和公钥。不能混用哦

3、把应用的appid、私钥、公钥和支付宝的公钥、网关URL 写到配置文件或是数据库。供程序调用

4编写zfb支付service类

首先引入jar包

<alipay-version>3.7.73.ALL</alipay-version>
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>${alipay-version}</version></dependency>
private static AlipayClient client = null;static {client = new DefaultAlipayClient(ORDER_URL,APPID,ICU_PRIVATE_KEY,"JSON","utf-8",ALIPAY_PUBLICKEY,AlipayConstants.SIGN_TYPE_RSA2);}/*** 获取支付二维码* @param clieid* @param proid* @param itemid* @param visitid* @param lang* @throws Exception* @author Mr G*/public void getQrcode(String clieid,String proid,String visitid,String itemid,String lang) throws Exception{JSONObject busobj = new JSONObject();busobj.put("clieid", clieid);busobj.put("proid", proid);busobj.put("visitid", visitid);PayOrderSubmit neworder = payOrderSubmitService.createOrder(clieid,itemid,busobj.toString(),lang,PayConst.PAYTYPE_ALI_SAOMAPAY);Map<String,Object> para = new HashMap<>();para.put("out_trade_no",neworder.getPayid());para.put("subject",neworder.getExpenote());//订单标题double paymoney = neworder.getPaymoney()/100d;para.put("total_amount",String.valueOf(paymoney));//订单金额 单位元// 卖家支付宝账号ID,用于支持一个签约账号下支持打款到不同的收款账号,(打款到sellerId对应的支付宝账号)// 如果该字段为空,则默认为与支付宝签约的商户的PID,也就是appid对应的PIDString sellerId = "";para.put("body","购买"+neworder.getExpenote()+paymoney+"元");//购买商品3件共20.00元";// 支付超时,定义为120分钟String timeoutExpress = "120m";//120m//允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 para.put("timeout_express", timeoutExpress);para.put("operator_id","test_operator_id");//商户操作员编号para.put("store_id", clieid);//store_id商户门店编号para.put("terminal_id", visitid);//商户机具终端编号// para.put("business_params", busobj);// para.put("extend_params", busobj);// 商品明细列表,需填写购买商品详细信息,
//        List<GoodsDetail> goodsDetailList = new ArrayList<GoodsDetail>();// 创建一个商品信息,参数含义分别为商品id(使用国标)、名称、单价(单位为分)、数量,如果需要添加商品类别,详见GoodsDetail
//        GoodsDetail goods1 = GoodsDetail.newInstance(outTradeNo, subject, 1, 1);// 创建好一个商品后添加至商品明细列表
//        goodsDetailList.add(goods1);AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();request.setBizContent(JsonUtil.objToJson(para));request.setNotifyUrl(NOTIFYURL);AlipayTradePrecreateResponse response = client.execute(request);String body = response.getBody();log.debug("ali qrcode result:"+body);JSONObject jsonbody = JSONObject.parseObject(body);JSONObject tradeResp = jsonbody.getJSONObject("alipay_trade_precreate_response");String code = tradeResp.getString("code");if("10000".equals(code)) {String code_url = tradeResp.getString("qr_code");log.debug("ali-code_url="+code_url);String base64 = QrcodeUtil.generateBase64Img(code_url,LOGOPATH);//根据业务需要可以把base64直接扔给前台src//TODOif(!b) {log.error("支付宝推送二维码失败:[clieid:{},proid:{},itemid:{},visitid:{}]",clieid,proid,itemid,visitid);}}else {log.error("支付宝获取二维码失败:{},[clieid:{},proid:{},itemid:{},visitid:{}]",tradeResp.getString("sub_msg"),clieid,proid,itemid,visitid);}}

在回调接口里想着在预下单时设置几个业务上的id值,然后再回调接口里使用,结果sdk里没有找到,后来干脆再数据库里查询了一下。有知道的伙伴可以留言说下。

5、用户扫码后使用支付宝支付完,还需编写回调接口。如下;

@SuppressWarnings("unused")public void payNotify() throws Exception {Map<String, String> notifyMap = notifyMap();boolean checkV1 = AlipaySignature.rsaCheckV1(notifyMap, ALIPAY_PUBLICKEY, "utf-8" ,AlipayConstants.SIGN_TYPE_RSA2);String replymsg="";if(checkV1) {//获取订单号String out_trade_no = notifyMap.get("out_trade_no");String buyer_logon_id = notifyMap.get("buyer_logon_id");//lov***@163.comString total_amount = notifyMap.get("total_amount");String seller_id = notifyMap.get("seller_id");String app_id = notifyMap.get("app_id");PayOrderSubmit submit = payOrderSubmitService.getOrderByPayid(out_trade_no);double paymoney = submit.getPaymoney()/100d;String ordernote = submit.getOrdernote();JSONObject noteobj = JSONObject.parseObject(ordernote);String clieid = noteobj.getString("clieid");String proid = noteobj.getString("proid");String visitid = noteobj.getString("visitid");if(submit!=null) {String trade_status = notifyMap.get("trade_status");if("TRADE_SUCCESS".equals(trade_status)) {if(total_amount.equals(String.valueOf(paymoney)) && PID.equals(seller_id)&& APPID.equals(app_id)) {//校验数据准确性replymsg=NOTIFY_SUCCESS;log.info("支付宝支付成功:clieid:{},proid:{},visitid:{},订单号:{}",clieid,proid,visitid,out_trade_no);//TODO log}else {log.error("本条通知是异常通知:[appid:{},pid:{},支付金额:{},订单号:{}]",app_id,seller_id,total_amount,out_trade_no);}}   }else {replymsg = NOTIFY_FAIL;log.error("支付宝通知-未获取到相应订单,[订单号:{}]",out_trade_no);}}else {replymsg=NOTIFY_FAIL;log.error("支付宝通知验签失败。");}ContextUtil.getResponse().getWriter().write(replymsg);}@SuppressWarnings("rawtypes")private Map<String,String> notifyMap() {HttpServletRequest req = ContextUtil.getRequest();Map<String,String> para = new HashMap<>();Enumeration names = req.getParameterNames();System.out.println("notifymap-----------------------------------");while(names.hasMoreElements()) {String k = (String) names.nextElement();para.put(k, req.getParameter(k));System.out.println(k+" = "+req.getParameter(k));}return para;}

6:后记:官方给的demo是在sdk的基础上又封装了一层,看的我眼花,所以就没采用demo写法。

https://docs.open.alipay.com/399/106843/

https://docs.open.alipay.com/api_1/alipay.trade.precreate

java实现支付宝扫码付款相关推荐

  1. java实现支付宝扫码支付和回调的Demo源码

    java实现支付宝扫码支付Demo源码 扫码效果图 需要现成源码的朋友,可以加Q76949433,提供技术支持! 项目结构截图: package com.pay.common; public clas ...

  2. app 打开支付宝扫码付款(当面付)

    app 打开支付宝扫码付款功能(当面付) saId=10000007 打开支付宝扫一扫功能 qrcode 请求网址(二维码网址) plus.runtime.openURL('alipays://pla ...

  3. java实现支付宝扫码支付详细步骤

    支付宝扫码支付API文档地址:https://opendocs.alipay.com/open/194/106078         , 先配置好public_lkey和private_key 在支付 ...

  4. java调用支付宝扫码支付接口

    说明: 由于没有商户账号,所以本文使用的是沙箱账号,本质跟真实账号是一样的,是支付宝为了方便开发人员开发调试而推出的策略.在真实开发中将商户公钥等修改为真实的商户即可. 支付基本流程 用户下单 商户账 ...

  5. Java接入支付宝扫码支付

    一.适用场景:pc端拉起付款二维码 用户扫码付款(非证书模式下单) 二.接入准备 1:支付宝-appId 2:支付宝公钥-appPublicKey (是支付宝公钥,不是应用公钥,拿错会无法拉起支付) ...

  6. [升级版]支付宝扫码付款直接到银行卡最新教程, 自动填写卡号

    目前业界普遍使用的微信.支付宝.第三方.第四方收款渠道,正遭大规模的封号.冻结.卡钱等等等等...您是否也是为此头疼已久?是否还有真正稳定的收款渠道?别急!试试支付宝快捷充值技术!支付宝扫一扫直接到账 ...

  7. 怎么开发支付宝扫码收款应用-java 支付宝当面付

    怎么开发支付宝扫码收款应用 说来也是很惭愧,之前计划好了每周写2~3篇的博客来记录,但是因为工作一忙(就是懒!)根本就没有时间来完成计划所以很久没有写了,希望之后可以每周一篇博客把,这篇主要就是记录一 ...

  8. 苹果+android+扫码支付,苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径...

    苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径.捷径是苹果手机一个比较实用的功能,如今手机扫码支付非常流行,因此在苹果手机中安装一个支付捷径,还是非常方便的.下面小编就来分享一个微信 ...

  9. C# Winform窗体实现支付宝扫码支付

    C# Winform窗体项目实现支付宝扫码支付 一.内容介绍 啪嗒!( 搬好小板凳 ) 大家好,本次学习的内容是在博主大一winform窗体项目中实现的一个功能--支付宝扫码支付: 主要功能通过支付宝 ...

  10. Java PC端微信、支付宝扫码支付(二)

    Java PC端微信.支付宝扫码支付(二) 前几天写了微信支付,附上链接 https://blog.csdn.net/qq_43494610/article/details/90411391 ,今天抽 ...

最新文章

  1. QTP的那些事--通过WMI获取session中的用户信息的验证码
  2. python爬虫案例-Python爬虫案例集合
  3. 网络编程 数据报是什么?TCP、UDP数据报结构
  4. Spring Cron Expression
  5. 详解vue项目和普通项目如何解决开发环境与生产环境下的跨域问题
  6. 洛谷 P1816 忠诚 ST函数
  7. hadoop之 Hadoop2.2.0中HDFS的高可用性实现原理
  8. redhat6 删除mysql_Red Hat enterprise linux 6卸载默认安装的 mysql
  9. iis7.5 php伪静态,Windows Server 2008 下WordPress IIS7.5伪静态规则设置(最新)
  10. 操作符!与操作符!!的区别
  11. [hihoCoder] 第五十周: 欧拉路·二
  12. 微课|中学生可以这样学Python(5.5.3节):字符串格式化1
  13. fft算法matlab程序,FFT算法(用matlab实现).doc
  14. C语言根号作用,c语言中如何开根号运算
  15. ISIS协议原理与配置
  16. c语言怎么输入若干整数,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
  17. TensorFlow XLA优化原理与示例
  18. Ural 1671 - Anansi's Cobweb 倒过来做...并查集维护..
  19. python窗口大小动态变化_如何在tkinter中动态调整窗口大小以“自动调整”其内容?...
  20. SpringBoot单元测试Mock静态方法

热门文章

  1. word文件怎么压缩?详细的操作步骤
  2. c语言绝对值函数作用,C语言实现abs和fabs绝对值
  3. 无人机倾斜摄影测量土方计算
  4. 【系】微信小程序云开发实战坚果商城-前端之分类实现
  5. MongoDB 文档操作之插入、查询
  6. PPT 图表不显示对应类型的数据解决办法
  7. 使用python批量压缩图片文件
  8. 全球顶尖互联网公司谷歌都在使用的Mono-Repo单体仓库
  9. win10设置默认英文输入键盘
  10. C语言实现摄氏、华氏温度转换