app+服务端发起支付宝支付(Java版)

支付宝支付文档

  • 流程:手机app端请求服务器,服务器返回一段字符串,app拿到字符串唤起支付宝进行支付

下面是服务端生成字符串内容代码,采用springmvc

@Controller
public class PayController {

    private AlipayClient client;

    public PayController() {
        AlipayConfig alipayConfig = new AlipayConfig();
        client = new DefaultAlipayClient(alipayConfig.getGateway_url(), alipayConfig.getAppid(),
                            alipayConfig.getRsa_private_key(), alipayConfig.getFormat(), alipayConfig.getCharset(),
                            alipayConfig.getAlipay_public_key(), alipayConfig.getSigntype());
    }

    @RequestMapping("appPayRequest")
    @ResponseBody
    public String appPayRequest(String orderNo) {
        // 这里可以做一些库存校验操作
        // this.check(orderNo);
        try {
            // SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
            // 调用RSA签名方式
            AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();

            // 封装请求支付信息
            AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
            // 用户自定义参数
            model.setPassbackParams(orderNo);

            Order order = getOrder(orderNo); // 查询订单     

            model.setOutTradeNo(order.getOutTradeNo()); // 商户网站唯一订单号,生成订单的时候就有
            model.setSubject(order.getGoodsName()); // 商品的标题/交易标题/订单标题/订单关键字等。
            model.setTotalAmount(MoneyUtils.formatMoney(order.getPayPrice())); // 设置金额
            model.setBody(order.getGoodsName()); // 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。           

            request.setBizModel(model);
            // 设置异步通知地址
            request.setNotifyUrl("http://xxx.xxx/callback");

            // 调用SDK生成表单
            AlipayTradeAppPayResponse response = client.sdkExecute(request);
            if (response.isSuccess()) {
                // 获取到getBody直接给app,用这个东西去调起支付宝
                return response.getBody();
            } else {
                logger.error("调用SDK生成表单失败,{}", JSON.toJSONString(response));
                throw new Exception(response.getSubMsg());
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            throw new Exception("支付失败");
        }
    }

}

支付宝配置:

public class AlipayConfig {

    // 商户ID
    private String appid = "";
    // 私钥
    private String rsa_private_key = "";
    // 异步回调地址
    private String notify_url;
    // 同步回调地址
    private String return_url;
    // 请求网关地址
    private String gateway_url;
    // 编码
    private String charset = "UTF-8";
    // 返回格式
    private String format = "json";
    // 支付宝公钥
    private String alipay_public_key = "";
    // RSA2
    private String signtype = "RSA2";

    //省略get set
}

当app支付成功后,支付宝会立即请求回调地址,回调处理可以查看这篇文章:支付宝支付后回调处理(Java版)

猜你喜欢

转载自blog.csdn.net/thc1987/article/details/80269871
今日推荐