最近一段时间接触了小程序以及其他一些相关的支付宝支付的对接,看了很长时间的开发文档。
对此也有自己的一些看法,在此记录。
具体的一些链接:
小程序支付接入:
接口相关参数文档:
生成RSA密钥工具:
样式:
一些前置工作在此不多说了。(审核申请等)
支付流程:
首先下载工具获得私钥和公钥。
拷贝商户应用公钥。
登录支付宝,右上角的账号管理中 设置应用公钥(需要绑定手机号以及一系列审核)
然后在代码中使用的全是支付宝公钥,不是应用公钥
导入pom依赖:
com.alipay.sdk alipay-sdk-java 3.3.87.ALL
贴一段主要代码:
/** * @Author xty * @Description * @Date 18:03 2018/10/26 */@Service("payService")@Transactional(rollbackFor = Exception.class, value = "transactionManager")public class PayServiceImpl implements PayService { /** * 商户appid */ public static String APPID = ""; /** * 请求网关地址 */ public static String URL = "https://openapi.alipay.com/gateway.do"; /** * 私钥 */ public static String RSA_PRIVATE_KEY = ""; /** * 支付宝公钥 */ public static String ALIPAY_PUBLIC_KEY =""; /** * RSA2 */ public static String SIGNTYPE = "RSA2"; /** * 返回格式 */ public static String FORMAT = "json"; /** * 编码 */ public static String CHARSET = "UTF-8"; @Override public AlipayTradeCreateResponse pay(AlipayRequest req) { Alipayclient alipayClient = new DefaultAlipayClient(URL, APPID, RSA_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGNTYPE); AlipayTradeCreateRequest request = new AlipayTradeCreateRequest (); request.setBizContent("{"+ "\"out_trade_no\""+":"+"\""+IdUtil.nextId()+"\""+","+ "\"total_amount\""+":"+"\""+req.getTotalAmount()+"\""+","+ "\"subject\""+":"+"\""+req.getSubject()+"\""+","+ "\"buyer_id\""+":"+"\""+req.getBuyerId()+"\""+ "}" ); AlipayTradeCreateResponse response = null; try { response = alipayClient.execute(request); } catch (AlipayApiException e) { e.printStackTrace(); } return response; }}
上面具体参数根据自己公司的来填写。
setBizContent中的业务参数可以看文档根据自己需要来传。
返回参数:
之后前端拿到参数进行接口调用。
my.tradePay({tradeNO: '2017111521001104105336677922', success: function(res) {my.alert(res.resultCode);},fail: function(res) { my.alert(res.resultCode); },});
关于buyer_id获取(userid)
相关授权:
前端获取auth_code,传给后端后返回userid和token,后端进行相关一系列业务处理。(token存入redis中)
/** * @Author xty * @Description * @Date 18:03 2018/10/26 */@Service("payService")@Transactional(rollbackFor = Exception.class, value = "transactionManager")public class PayServiceImpl implements PayService { @Autowired private ICache iCache; @Autowired private UcUserRelationService ucUserRelationService; @Override public AlipaySystemOauthTokenResponse oauth(AliOauthTokenRequest request) throws AlipayApiException { AlipayClient alipayClient = new DefaultAlipayClient(AlipayConstant.URL, AlipayConstant.APPID, AlipayConstant.RSA_PRIVATE_KEY, AlipayConstant.FORMAT, AlipayConstant.CHARSET, AlipayConstant.ALIPAY_PUBLIC_KEY, AlipayConstant.SIGNTYPE); AlipaySystemOauthTokenRequest alipaySystemOauthTokenRequest = new AlipaySystemOauthTokenRequest(); alipaySystemOauthTokenRequest.setGrantType(request.getGrantType()); alipaySystemOauthTokenRequest.setCode(request.getCode()); alipaySystemOauthTokenRequest.setRefreshToken(request.getRefreshToken()); AlipaySystemOauthTokenResponse response = alipayClient.execute(alipaySystemOauthTokenRequest); if (response.isSuccess()) { String userId = response.getUserId(); String accessToken = response.getAccessToken(); //1.存入关系表 UcUserRelation ucUserRelation = new UcUserRelation(); ucUserRelation.setId(IdUtil.nextId()); ucUserRelation.setUserId(request.getLoginUserId()); ucUserRelation.setObjType(UcUserRelationObjType.ALIPAY.value); ucUserRelation.setObjId(Long.parseLong(userId)); ucUserRelation.setObjNo(request.getCode()); ucUserRelation.setCreateBy(Long.parseLong("0")); ucUserRelation.setGmtCreate(new Date()); ucUserRelation.setModifyBy(Long.parseLong("0")); ucUserRelation.setGmtModify(new Date()); ucUserRelationService.insertSelective(ucUserRelation); //2.token存入redis iCache.setString(userId,accessToken,30,TimeUnit.MINUTES); return response; } else { return response; } }}