支付宝手机H5支付笔记

来源:互联网 发布:淘宝卖家小卡片内容 编辑:程序博客网 时间:2024/04/28 01:47

支付宝的文档其实说的很清楚了
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.ro3ZlF&treeId=203&articleId=105285&docType=1

https://b.alipay.com 登陆

跳转管理中心 创建新应用
这里写图片描述

填写应用环境
这里写图片描述

填写功能信息
这里写图片描述
上线应用
这里写图片描述

然后具体业务实现
首先 要用我们的订单号去支付宝 下单 然后支付宝会给我们一个html字符串

/**   * 外部商户创建订单   *    * @return   */  public String unifiedOrder(String caseNum) {    RechargeBase rechargeBase = chargeService.queryRechargeBaseByOne(caseNum);    WXGoodsDetail gd = BeanHelper.copyProperties(rechargeBase, WXGoodsDetail.class);    AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();// 创建API对应的request    alipayRequest.setReturnUrl("http://XXXXXX/XXX/XXX/gateway");    alipayRequest.setNotifyUrl("http://XXXXXX/XXX/XXX/orderback");// 在公共参数中设置回跳和通知地址    alipayRequest.setBizContent("{" + "    \"out_trade_no\":\"" + gd.getSequenceNumber() + "\","        + "    \"total_amount\":" + gd.getFee() + "," + "    \"subject\":\"" + gd.getChargeDesc() + "\","        + "    \"product_code\":\"QUICK_WAP_PAY\"" + "  }");// 填充业务参数    String form = null;    try {      form = alipayClient.pageExecute(alipayRequest).getBody();    } catch (AlipayApiException e) {      LOG.error(e.getMessage(), e);    } // 调用SDK生成表单    return form;  }

这个form呢 是一段html 直接把这个form输出出来就可以了

    String info = aliPayService.unifiedOrder(sequenceNum);    response.setContentType("text/html;charset=UTF-8");    response.getWriter().write(info);    response.getWriter().flush();

这个页面会自动跳转到支付宝的页面去 是h5支付的话 会自动唤醒支付宝app支付订单
只要保证配置的那些秘钥啊 appid啊 都是对的 就好了

支付成功后

/**   * 支付宝网关  用户支付成功后 支付宝会把这个地址告诉用户 然后用户会访问这个地址 后台敷衍一下 提示成功就好了   * @return   */  @RequestMapping("/pay/gateway")  public ModelAndView returnUrl(){    ModelAndView mv=new ModelAndView("pay_success");    LOG.info("支付宝网关被调用");    return mv;  }
/**   * 授权回调地址 用户支付成功后 支付宝会直接访问这个地址 然后后台处理具体的业务逻辑   * @return   * @throws UnsupportedEncodingException    */  @RequestMapping(value="/pay/orderback",method=RequestMethod.POST)  public void notifyUrl( String trade_status, String out_trade_no, String trade_no) throws UnsupportedEncodingException{    request.setCharacterEncoding("utf-8");    Map<String,String> params = new HashMap<String,String>();    Map requestParams = request.getParameterMap();    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"), "utf-8");      params.put(name, valueStr);    }    try {      aliPayService.notifyUrl(params, trade_status, out_trade_no, out_trade_no);    } catch (EducationException e) {      LOG.info(e.getMessage());    }    LOG.info("支付宝授权回调地址被调用");  }

0 0