アリペイオープンプラットフォームhttps://open.alipay.com 新しいアプリケーションを追加し、携帯電話サイトの支払い/APP支払いと契約した.
サービス側はjavaを使用して、支付宝sdkを統合して、住所をダウンロードします:https://search.maven.org/search?q=g:com.alipay.sdk AND a:alipay-sdk-java&core=gavまたは
com.alipay.sdk
alipay-sdk-java
3.6.0.ALL
以降のより多くの支払い方式の拡張を容易にするために、まずインタフェースを定義し、新しい支払い方式が必要で、このインタフェースを実現するだけで、支付宝を例に 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();
}
今支付宝の携帯電話の支払いインターフェースをドッキングしたいと思って、先に配置インターフェースを実現します
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";
}
}
実例化配置対象、各種支払い方式集積、爽快なロット @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());
}
}
配置類が書けば注文できます 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);
}
上のインタフェースから返されるformフォームを入手し、フロントエンジニアリングでresponseを介して直接戻ればよい、残りはフロントエンドに渡し、支払いプロセスを完了すればよい、これでを終了する.
部分コード注釈が規範に合致しないところはすべて手動で追加した解釈 APP
である.
private void aliOrder4App(Order order) {
if (!Order.PAY_TYPE_ALIPAY.equalsIgnoreCase(order.getPayType())) {
return;
}
AlipayTradeAppPayRequest alipayRequest = new AlipayTradeAppPayRequest ();
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody(" ");
model.setSubject(" ");
model.setOutTradeNo(order.getBizId());
model.setTimeoutExpress("30m");
model.setTotalAmount(order.getAmount());
model.setProductCode("QUICK_MSECURITY_PAY");
alipayRequest.setBizModel(model);
alipayRequest.setNotifyUrl(alipayNotifyUrl);
try {
String orderString = alipayClient.sdkExecute(alipayRequest).getBody();
order.setOrderString(orderString);
logger.warn(" :" + orderString);
} catch (AlipayApiException e) {
logger.error(e.getErrMsg(), e);
ServiceException.builder().setErrorMsg(e.getErrMsg()).throwEx();
}
}