支付宝支払Javaバックグラウンドまとめ
4240 ワード
この支払いの流れは、フロントエンドH 5(APPなど)が支払う必要があるときにバックグラウンドのインタフェースを呼び出し、私たちが暗号化した署名を持って支付宝の支払いインタフェース(支付宝APP)を呼び出して支払い操作を行い、フロントエンドが支払いに成功した後、支付宝のバックグラウンドは署名時に書いたインタフェースのアドレスを返して支払い結果の非同期通知を行う.
1、作成中に使用された変数には、主に秘密鍵、公開鍵、およびあなたのAPPID(H 5支払いは必要ありません)があります.これらはアリの金服に登録してから手に入れたものです. 2、使用したjarパッケージ: alipay-sdk-java*.JAr—————————支付宝SDKコンパイルファイルjar alipay-sdk-java*-source.JAr——————支付宝SDKソースファイルjar commons-logging-1.1.1.JAr——————SDK依存ログjar commons-logging-1.1.1-sources.JAr———SDK依存のログソースjar支付宝のSDKのjarパッケージはmaven repositoryに登録されていないので、自分で公式サイトでjarパッケージをダウンロードしてmaven倉庫に打ち込む必要があります.書くのがおっくうな学生はここをクリックして直接ダウンロードすることができます.
署名を取得するインタフェース
コールバックのインタフェースコールバックのアドレスは必ず外部ネットワークのアドレスであることを保証しなければならない.内部ネットワーク開発のアドレスはファイアウォールの制限のため必ずしもアクセスできない.
事前準備
コード#コード#
署名を取得するインタフェース
@ResponseBody
@RequestMapping(value="/alipaySign",method=RequestMethod.POST)
public JSONObject signprams(Double totalAmount,String userId,String out_trade_no){
String subject = "Your Subject"; //
String body = "Your Body"; //
String CHARSET = "utf-8";
/**
*
*/
AlipayClient alipayClient = new DefaultAlipayClient
(PayConstants.Ali_Open_Api_Domain,PayConstants.Ali_AppId,
PayConstants.ALI_PRIVATE_KEY,"json",CHARSET,PayConstants.ALI_PUBLIC_KEY,"RSA2");
// API request ,
AlipayTradeAppPayRequest alirequest = new AlipayTradeAppPayRequest();
//sdk model
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setPassbackParams(body); // ,
model.setSubject(subject); //
model.setOutTradeNo(out_trade_no); //
model.setTimeoutExpress("30m"); //
model.setTotalAmount(Double.toString(totalAmount)); // double String
model.setProductCode(PayConstants.Ali_ProductCode);
alirequest.setBizModel(model);
alirequest.setNotifyUrl(PayConstants.Ali_Notify_Url); //
String orderStr = "";
try {
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(alirequest);
orderStr = response.getBody();
} catch (AlipayApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String sign = DigestUtils.md5Hex(out_trade_no).toUpperCase();
///////////////// /////////////////////////
JSONObject resObj = new JSONObject();
resObj.put("code", "SUCCESS");
resObj.put("out_trade_no", out_trade_no);
resObj.put("sign", sign);
resObj.put("orderStr",orderStr);
System.out.println(resObj.toJSONString());
System.out.println(resObj.toString());
return resObj;
}
コールバックのインタフェースコールバックのアドレスは必ず外部ネットワークのアドレスであることを保証しなければならない.内部ネットワーク開発のアドレスはファイアウォールの制限のため必ずしもアクセスできない.
@ResponseBody
@RequestMapping(value="/alipayNotify",method=RequestMethod.POST)
public String getNotify(HttpServletRequest request){
Map requestParams = request.getParameterMap();
logger.info(" :"+requestParams.toString());
// POST
Map params = new HashMap();
for(Iterator iter=requestParams.keySet().iterator();iter.hasNext();){
String name = (String)iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr= "";
for(int i=0;i < values.length;i++){
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
logger.info(valueStr);
// , 。
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
}
/////////////////// //////////////////////
try {
boolean flag = AlipaySignature.rsaCheckV1
(params, PayConstants.ALI_PUBLIC_KEY, "UTF-8", "RSA2");
if(flag){
if("TRADE_SUCCESS".equals(params.get("trade_status")))
}
} catch (AlipayApiException e) {
e.printStackTrace();
}
return "SUCCESS";
}