支付宝扫码须要开通特定权限,拼接参数有些许不一样,页面上的二维码若是是内嵌的就让H5本身去生成,订单和请求字符串服务端生成:ui
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); //存库
支付宝的回调跟手机端回调差很少:url
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,要不他一直发code