支付宝小程序支付接口
相关文档
小程序支付开通官方文档
1.开通小程序收款权限
2.总体流程
问题:
1.在alipay.trade.create中需要传递给服务器用户的buyer_id即user_id
如何获取user_id:
1).在支付宝前段获得用户授权,得到authCode
2).调用支付宝接口传递授权码,得到用户其他信息(userid access_token)
获取用户信息官方接口
public String getUserId(String authcode) { AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliPayConfig.getAPP_ID(), aliPayConfig.getAPP_PRIVATE_KEY(), "json", "GBK", aliPayConfig.getALIPAY_PUBLIC_KEY(), "RSA2"); AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); request.setGrantType("authorization_code"); request.setCode(authcode); request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b"); try { AlipaySystemOauthTokenResponse response = alipayClient.execute(request); if (response.isSuccess()) { return response.getUserId(); } else { logger.info("获取用户id失败"); } } catch (AlipayApiException e) { e.printStackTrace(); } return null; }
2.在调用alipay.trade.create时,需要传递给服务器支付宝公匙和小程序的私匙
需要在小程序界面设置
3.回调url需要我们在调用alipay.trade.create时传递给服务器
4.java后端使用alipay.trade.create官方示例时会出现参数无效错误,使用model方法传递参数
public String getTradeNO(String fee, String authcode,String phone) { AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliPayConfig.getAPP_ID(), aliPayConfig.getAPP_PRIVATE_KEY(), "json", "UTF-8", aliPayConfig.getALIPAY_PUBLIC_KEY(), "RSA2");//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.create. AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();//SDK已经封装掉了公共参数,这里只需要传入业务参数。 AlipayTradeCreateModel model = new AlipayTradeCreateModel(); model.setBuyerId(buyerId);//这里是刚刚获得的userid model.setOutTradeNo(out_trade_no);//这个是我们自己创建的订单号,便于处理后面的回调函数 model.setSubject("geek small program recharge"); model.setTotalAmount(fee);//支付宝后端单位为元 request.setNotifyUrl(aliPayConfig.getNotifyUrl());//用户支付成功后,支付宝会给notifyurl发送请求 request.setBizModel(model);// request.setBizContent("{" +// ""out_trade_no":" + out_trade_no + ',' +// ""total_amount":" + fee + ',' +// ""subject":"极市,小程序充值"," +// ""buyer_id":" + buyerId + ',' +// " }");不能使用这种方式支付,不然会出现参数无效错误 try { //使用的是execute AlipayTradeCreateResponse response = alipayClient.execute(request); String trade_no = response.getTradeNo();//获取返回的tradeNO。 System.out.println(response.getBody()); return trade_no; } catch (AlipayApiException e) { e.printStackTrace(); System.out.println("获取订单号失败"); return "获取订单号失败"; } }
5.回调函数验签失败,当支付宝发送给我们消息时如果有中文,当我们使用错误的编码模式时会出现中文乱码导致验签失败