支付宝扫码需要开通特定权限,拼接参数有些许不同,页面上的二维码如果是内嵌的就让H5自己去生成,订单和请求字符串服务端生成:

  Map<String, String> paramMap = new HashMap<String, String>();paramMap.put("service",PayPropertiesUtils.getString("alipay.scanCodePay.service"));paramMap.put("partner",PayPropertiesUtils.getString("alipay.scanCodePay.partner"));paramMap.put("_input_charset",PayPropertiesUtils.getString("alipay.inputCharset"));paramMap.put("notify_url",PayPropertiesUtils.getString("alipay.scanCodePay.notifyUrl"));if(StringUtils.isBlank(payExtendVo.getReturnUrl())) {if(!StringUtils.isBlank(paymentTypeEnum.getReturnUrlPropName())) {paramMap.put("return_url",PayPropertiesUtils.getString(paymentTypeEnum.getReturnUrlPropName()));}} else {paramMap.put("return_url",payExtendVo.getReturnUrl());}paramMap.put("out_trade_no",payExtendVo.getOrderId());paramMap.put("subject", GlobalConstants.PAY_PRODUCT_NAME);paramMap.put("payment_type", PayPropertiesUtils.getString("alipay.scanCodePay.paymentType"));paramMap.put("total_fee", String.valueOf(payExtendVo.getPayAmount()));paramMap.put("seller_id", PayPropertiesUtils.getString("alipay.scanCodePay.partner"));paramMap.put("seller_email", PayPropertiesUtils.getString("alipay.scanCodePay.sellerEmail"));paramMap.put("body", GlobalConstants.PAY_PRODUCT_NAME);//show_url 收银台页面上,商品展示的超链接。可空//paymethod 取值范围: creditPay(信用支付) directPay(余额支付) 如果不设置,默认识别为余额支付。//enable_paymethod 支付渠道 用于控制收银台支付渠道显示,该值的取值范围请参见支付渠道。 可支持多种支付渠道显示,以“^”分隔。可空//anti_phishing_key 防钓鱼时间戳//exter_invoke_ip 防钓鱼保护时必填写//extra_common_param 公用回传参数 可控//token  如果开通了快捷登录产品,则需要填写;如果没有开通,则为空。//need_buyer_realnamed 是否需要买家实名认证 T表示需要买家实名认证; 不传或者传其它值表示不需要买家实名认证。可空//hb_fq_param 花呗分期参数paramMap.put("it_b_pay", PayPropertiesUtils.getString("alipay.scanCodePay.itBPay"));paramMap.put("qr_pay_mode", PayPropertiesUtils.getString("alipay.scanCodePay.qrPayMode"));//商户自定二维码宽度 当qr_pay_mode=4时,该参数生效。if(StringUtils.isNotBlank(payExtendVo.getQrcodeWidth())) {paramMap.put("qrcode_width",payExtendVo.getQrcodeWidth());}paramMap.put("goods_type",PayPropertiesUtils.getString("alipay.scanCodePay.goodsType"));logger.info("alipayScanCodePayService----thridPartyPayCall-----");//去除空值Map<String,String> signMap = AlipayCore.paraAppFilter(paramMap);//生成签名String sign = Signature.buildRequestMysign(signMap,PayPropertiesUtils.getString("alipay.scanCodePay.signType"), PayPropertiesUtils.getString("alipay.scanCodePay.md5Key"));signMap.put("sign",sign);logger.info("alipayScanCodePayService----thridPartyPayCall-----sign="+sign);//获取业务参数串String payReqStr = PayPropertiesUtils.getString("alipay.scanCodePay.requestUrl") + AlipayCore.createLinkString(signMap);logger.info("alipayScanCodePayService----thridPartyPayCall-----payReqStr=" + payReqStr);Map returnMap = new HashMap();returnMap.put("scanCodeUrl",payReqStr);returnMap.put("orderId",payExtendVo.getOrderId());returnMap.put("payAmount",tradeLog.getPayAmount());returnMap.put("income",tradeLog.getIncome());returnMap.put("rewardFanpiao",tradeLog.getRewardFanpiao());returnMap.put("incomeAmount",tradeLog.getIncomeAmount());resultBean.setData(returnMap);//存库

支付宝的回调跟手机端回调差不多:

 String tradeStatus = String.valueOf(thridPartyNotifyVo.getAlipayTradeStatus());try {Map<String, String> checkParamsMap = new HashMap<String,String>();Map requestParams = thridPartyNotifyVo.getAliPayRequestParamsMap();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] + ",";}//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");checkParamsMap.put(name, valueStr);}if (AlipayNotify.verify(checkParamsMap,PayPropertiesUtils.getString("alipay.scanCodePay.signType"),PayPropertiesUtils.getString("alipay.scanCodePay.md5Key"))) { //验证响应请求正确if(!"TRADE_FINISHED".equals(tradeStatus) && !"TRADE_SUCCESS".equals(tradeStatus)) { //支付失败resultBean = new ResultBean(ResultCode.PayAlipayNotifyIsPayFail.get_code(),ResultCode.PayAlipayNotifyIsPayFail.getMsg()+";返回误码:"+tradeStatus, NOTFIY_EXCEPTION_IS_HANDLER);}} else {resultBean = new ResultBean(ResultCode.UNSUCCESS.get_code(),ResultCode.PayAlipayNotifyIsNotValidUrl.getMsg()+";返回码:"+tradeStatus, NOTFIY_EXCEPTION_IS_NOT_HANDLER);}
//更余额

最后别忘了返回支付宝一个success,要不他一直发

转载于:https://my.oschina.net/u/2421441/blog/841078

支付的那些套路(支付宝扫码篇)相关推荐

  1. 支付宝扫码支付模式平台介绍

    互联网在逐渐普及过程中,智能手机逐渐成为人们日常生活内主要电子设备.互联网支付在逐渐普及过程中,移动支付也逐渐出现在人们日常生活工作内,互联网支付企业也逐渐参与到线下支付行列内.第三方支付企业在为社会 ...

  2. 视频教程-PHP支付宝扫码支付-PHP

    PHP支付宝扫码支付 我是一名计算机教师,从事于教学10多年,在计算机教学方面有丰富的经验. 孙培超 ¥40.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅 ...

  3. springBoot项目实现支付宝扫码支付(完整篇)

    准备工作,让老板准备好支付宝的商户号,支付宝私钥,支付宝公钥. 说明: 注意重点 一点要看 支付宝扫码支付跟微信扫码支付是不一样的,微信我们是调用微信那边,微信给我们返回二维码链接,然后前端生成二维码 ...

  4. [go]沙盒环境下调用支付宝扫码支付

    参考于这篇博客,在此基础上进行了封装 配置支付宝开放平台 支付宝开放平台,使用支付宝扫码并成为开发者.然后进入沙盒进行测试 下载沙盒版支付宝并使用沙盒账号中的买家信息进行登陆,之后使用此账号登陆的支付 ...

  5. VB.net开发微信、支付宝扫码支付源码

    扫码消费机介绍:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.2.2b826baawDkx32&id=170 ...

  6. 支付宝扫码支付-PC版(沙箱环境)

    前言 最近开发了PC端支付宝扫码支付的功能,使用的是沙箱环境.所谓的沙箱环境,其实就是支付宝提供的测试环境(毕竟正式环境需要营业执照等信息进行注册,注册通过后还有一些流程,才能进行正式的扫码支付.对于 ...

  7. VFP开发微信、支付宝扫码支付

    &&扫码消费机介绍:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.4.2b826baa9cTxs0& ...

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

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

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

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

最新文章

  1. 开启笔记本win7的虚拟热点,让你的本本变成wifi
  2. 初等数论--同余--WILSON定理
  3. Silverlight实用窍门系列:54.详解Silverlight中的矩阵变换MatrixTransform,实现其余各种变换【附带实例源码】...
  4. 苹果平板怎么卸载软件_怎么很好的卸载流氓软件!
  5. “不差钱”华为刷屏 拟募资60亿!
  6. maven netty 配置_进阿里、腾讯、字节跳动、美团必掌握的Netty
  7. python集成包地址 Anaconda 一键安装拥有所有包
  8. 光环PMP 项目资源管理、项目相关方管理
  9. html背景色不透明度,css怎么设置颜色不透明度?
  10. 【CDN学习笔记6】CDN回源到阿里云主机被拒绝的案例
  11. 几何平均回归Geometric Mean Regression——使用Python实现
  12. 前后端分离API接口如何加密 —— AES加密方案
  13. tp无线路由器设置打印服务器,TP-Link TL-WDR4320 无线路由器打印服务器设置指南
  14. @Aspect注解使用场景
  15. docker个人容器云(基于阿里云)
  16. SUBSTR()函数详解
  17. 再谈如何学习Linux,一线Linux专家学习经验谈
  18. 二、Servlet生命周期
  19. 超级筹码理论系列(一)——游资黑马炒作模式
  20. 在java中,OOA是什么?OOD是什么?OOP是什么?

热门文章

  1. 吃鸡手游加入武侠元素:《武侠乂》跟《江湖求生》能火吗?
  2. VMware Tools 选项灰色解决方法
  3. 两天撸一个优惠券小程序,记录下开发的小小经验
  4. 量化交易平台Ptrade、QMT框架,入门
  5. Yolov5定位VIN码后获取vin的区域并识别
  6. JVM垃圾回收器介绍和对比
  7. 爆肝4万字❤️零基础掌握Verilog HDL
  8. Java面向接口编程的方式开发打印机(墨盒颜色,纸张大小)
  9. PXE高效批量网络装机(含PXE+kickstart自动安装)
  10. 20230217 Python操作word