支付宝小程序支付接口
相关文档
小程序支付开通官方文档
1.开通小程序收款权限
2.总体流程
问题:
1.在alipay.trade.create中需要传递给服务器用户的buyer_id即user_id
如何获取user_id:
1).在支付宝前段获得用户授权,得到authCode
2).调用支付宝接口传递授权码,得到用户其他信息(useridaccess_token)
获取用户信息官方接口
public String getUserId(String authcode) {AlipayClient alipayClient = new DefaultAlipayClient("/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("08134b203fe6c11548bcabd8da5bb087a83b");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("/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);//这里是刚刚获得的useridmodel.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 {//使用的是executeAlipayTradeCreateResponse 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.回调函数验签失败,当支付宝发送给我们消息时如果有中文,当我们使用错误的编码模式时会出现中文乱码导致验签失败