app和h5怎样对接支付宝支付接口?

1.支付宝开放平台https://open.alipay.com 新增应用并签约手机网站支付/APP支付。
2.服务端使用java, 集成支付宝sdk。
3.为方便以后更多支付方式扩展, 先定义接口, 需要新的支付方式只需实现该接口, 以支付宝为例。

public interface AliPayConfig {

		    /**
		     * 获取 App ID
		     *
		     * @return App ID
		     */
		    String getAppID();
		
		
		    /**
		     * 获取 APP_PRIVATE_KEY
		     *
		     * @return APP_PRIVATE_KEY
		     */
		    String getAppPrivateKey();
		
		
		    /**
		     * 获取 ALIPAY_PUBLIC_KEY
		     *
		     * @return ALIPAY_PUBLIC_KEY
		     */
		    String getAlipayPublicKey();
		
		
		    /**
		     * 获取 支付宝网关
		     *
		     * @return 支付宝网关
		     */
		    String getAlipayGateway();
		
		    /**
		     * 获取 json
		     *
		     * @return json
		     */
		    String getFormat();
		
		    /**
		     * 获取 Charset
		     *
		     * @return Charset
		     */
		    String getCharset();
		
		    /**
		     * 获取 SignType
		     *
		     * @return SignType
		     */
		    String getSignType();
		}

4.现在想对接支付宝的手机支付接口, 先实现配置接口。

public class AliWapConfig implements AliPayConfig {
		
		    //沙箱账号
		    private static final String ALIPAY_APP_ID = "";
		    private static final String ALIPAY_GATEWAY = "https://openapi.alipaydev.com/gateway.do";
		    private static final String ALIPAY_APP_PRIVATE_KEY = "";
		    private static final String ALIPAY_PUBLIC_KEY = "";
		
		    @Override
		    public String getAppID() {
		        return ALIPAY_APP_ID;
		    }
		
		    @Override
		    public String getAppPrivateKey() {
		        return ALIPAY_APP_PRIVATE_KEY;
		    }
		
		    @Override
		    public String getAlipayPublicKey() {
		        return ALIPAY_PUBLIC_KEY;
		    }
		
		    @Override
		    public String getAlipayGateway() {
		        return ALIPAY_GATEWAY;
		    }
		
		    @Override
		    public String getFormat() {
		        return "json";
		    }
		
		    @Override
		    public String getCharset() {
		        return "UTF-8";
		    }
		
		    @Override
		    public String getSignType() {
		        return "RSA2";
		    }
		}

5.实例化配置对象, 各种支付方式集成。

@Configuration
	public class Config {
	
	    @Value("${weixin.pay.useSandbox:false}")
	    private boolean useSandbox;
	
	    @Autowired
	    private OkHttpClient okHttpClient;
	
	    @Bean
	    public WxConfig wxConfig() {
	        return new WxConfig();
	    }
	
	    @Bean
	    public WxMiniConfig wxMiniConfig() {
	        return new WxMiniConfig();
	    }
	
	    @Bean
	    public WxFasterConfig wxFasterConfig() {
	        return new WxFasterConfig();
	    }
	
	    @Bean
	    public AliWapConfig aliWapConfig() {
	        return new AliWapConfig();
	    }
	
	    @Bean("wxAPay")  //微信app_A支付
	    public WXPay wxAPay() {
	        return new WXPay(wxConfig(), WXPayConstants.SignType.MD5, useSandbox, okHttpClient);
	    }
	
	    @Bean("wxMiniPay") //微信小程序支付
	    public WXPay wxMiniPay() {
	        return new WXPay(wxMiniConfig(), WXPayConstants.SignType.MD5, useSandbox, okHttpClient);
	    }
	
	    @Bean("wxBPay") //微信app_B支付
	    public WXPay wxBPay() {
	        return new WXPay(wxFasterConfig(), WXPayConstants.SignType.MD5, useSandbox, okHttpClient);
	    }
	
	    @Bean("aliWapPay")  //支付宝H5支付
	    public AlipayClient aliFasterWapClient() {
	        AliWapConfig config = aliWapConfig();
	        return new DefaultAlipayClient(config.getAlipayGateway(),
	                config.getAppID(), config.getAppPrivateKey(), config.getFormat(), config.getCharset(),
	                config.getAlipayPublicKey(), config.getSignType());
	    }
	}

6.配置类写好之后就可以下单了

 public Order order4F(@RequestBody Order order) {
		//生成订单操作
		
        //先保存订单信息,供失败后可以查询
        saveOrder(order);

        switch (order.getPayType()) {
            case Order.PAY_TYPE_WXPAY://微信支付
                wxOrder(order);
                break;
            case Order.PAY_TYPE_ALIPAY://支付宝支付
                aliOrder4Wap(order); 
                break;
            default:
                break;
        }

        //微信支付更新订单prepayId
        if (Order.PAY_TYPE_WXPAY.equals(order.getPayType())) {
            saveOrder(order);
        }

        return order;
    }

	
	private void aliOrder4Wap(Order order) {
	        if (!Order.PAY_TYPE_ALIPAY.equalsIgnoreCase(order.getPayType())) {
	            return;
	        }
	
	        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
	        alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
	        alipayRequest.setNotifyUrl(alipayNotifyUrl);
	        alipayRequest.setBizContent("{" +
	                " \"out_trade_no\":\"" + order.getBizId() + "\"," +
	                " \"total_amount\":\"" + order.getAmount() + "\"," +
	                " \"subject\":\"***\"," +
	                " \"product_code\":\"QUICK_MSECURITY_PAY\"" +
	                " }");//填充业务参数
	        //支付宝返回的form表单
	        String form="";
	        try {
	            form = alipayClient.pageExecute(alipayRequest).getBody();
	            logger.warn("支付宝订单生成结果:" + form);
	        } catch (AlipayApiException e) {
	            logger.error(e.getErrMsg(), e);
	            ServiceException.builder().setErrorMsg(e.getErrMsg()).throwEx();
	        }
	        
			order.setForm(form);
	    }

7.拿到上面接口返回的form表单, 在前台工程通过response直接返回即可, 剩下的交给前端, 走完支付流程即可,到此结束。

回到稻壳网首页
稻壳客服

扫一扫,微信咨询

请留下需求和联系方式,我们即刻为您准备方案
需求提交成功

提交成功

免费服务热线021-61676039(工作日9:00 ~ 18:00)
×
稻壳客服

扫一扫,微信咨询