1.支付寶開放平臺//open.alipay.com 新增應用并簽約手機網站支付/APP支付。
2.服務端使用java, 集成支付寶sdk。
3.為(wei)方(fang)(fang)便以(yi)后更多(duo)支(zhi)(zhi)付(fu)方(fang)(fang)式擴展, 先(xian)定義(yi)接口, 需要新(xin)的支(zhi)(zhi)付(fu)方(fang)(fang)式只需實現該接口, 以(yi)支(zhi)(zhi)付(fu)寶為(wei)例。
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.現在想對(dui)接(jie)支付寶的手機支付接(jie)口, 先(xian)實現配(pei)置接(jie)口。
public class AliWapConfig implements AliPayConfig {
//沙箱賬號
private static final String ALIPAY_APP_ID = "";
private static final String ALIPAY_GATEWAY = "//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.實例化配置對象, 各種(zhong)支付方式(shi)集成(cheng)。
@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.配(pei)置(zhi)類寫好(hao)之后就可以下單了
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("//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.拿到上面接口返回的(de)form表單, 在前(qian)臺(tai)工(gong)程(cheng)通過response直接返回即可, 剩下的(de)交(jiao)給前(qian)端, 走完支付流(liu)程(cheng)即可,到此結(jie)束(shu)。