微信小微商户支付php代码,微信支付 - 小微商户入驻 接口分析与源码实现

一、小微商户能力介绍 (摘自 微信小微商户介绍)

1. 快速进件

2. 支持零钱、借记卡、信用卡支付方式

3. 交易手续费支持11档枚举值

4. 每日结算款T+1日自动提现至商户个人银行卡

具体不多说了,请看官方文档。

小微商户进件接口的开放大大降低成为微信支付商户的门槛,当然前提是提供服务者拥有微信支付服务商身份。

具体接口操作步骤如下(本文代码用的是WxJava相关的类库,githhub地址:https://github.com/Wechat-Group/WxJava):

这里相应的 WxPayMicroSubmitRequest,与 WxPayMicroSubmitResult 等都是根据相关接口整合出来的,这里不再详细描述

public R wxMicroSubmit(@RequestBody WxPayMicroSubmitRequest wxPayMicroSubmitRequest) throwsException {//构造riskGetcertficatesRequest

WxPayRiskGetcertficatesRequest riskGetcertficatesRequest = newWxPayRiskGetcertficatesRequest(WxPayConstants.SignType.HMAC_SHA256);

riskGetcertficatesRequest.checkAndSign(wxPayService.getConfig());//请求证书序列号 cert_sn

String certSnUrl = wxPayService.getPayBaseUrl() + "/risk/getcertficates";

String certSnResponseContent= wxPayService.post(certSnUrl,riskGetcertficatesRequest.toXML(),false);

WxPayRiskGetcertficatesResult wxPayRiskGetcertficatesResult= WxPayRiskGetcertficatesResult.fromXML(certSnResponseContent,WxPayRiskGetcertficatesResult.class);/*** 填充 wxPayMicroSubmitRequest 字段*/

//平台证书序列号

wxPayMicroSubmitRequest.setCertSn(wxPayRiskGetcertficatesResult.getCertSn());//业务申请编号 micro + 时间戳

wxPayMicroSubmitRequest.setBusinessCode("micro" + DateUtils.format(new Date(),"YYYYMMddHHmmssSSS"));//费率

wxPayMicroSubmitRequest.setRate("0.6%");//消息加密前 创建SellerMicroSubmitInfoEntity 并赋值

SellerMicroSubmitInfoEntity sellerMicroSubmitInfoEntity = newSellerMicroSubmitInfoEntity();

BeanUtils.copyProperties(wxPayMicroSubmitRequest,sellerMicroSubmitInfoEntity);//1.敏感信息加密处理

wxPayMicroSubmitRequest.rsaEncryptField((WxPayServiceImpl)wxPayService);//2.调用checkAndSign 补充系统参数

wxPayMicroSubmitRequest.checkAndSign(wxPayService.getConfig());

String microSubmitUrl= wxPayService.getPayBaseUrl() + "/applyment/micro/submit";

String responseContent= wxPayService.post(microSubmitUrl,wxPayMicroSubmitRequest.toXML(),true);

WxPayMicroSubmitResult wxPayMicroSubmitResult= WxPayMicroSubmitResult.fromXML(responseContent,WxPayMicroSubmitResult.class);if("SUCCESS".equals(wxPayMicroSubmitResult.getReturnCode())){//如果请求成功,则保存小微企业申请数据//设置 applymentId

sellerMicroSubmitInfoEntity.setApplymentId(wxPayMicroSubmitResult.getApplymentId());//保存

sellerMicroSubmitInfoService.saveOrUpdate(sellerMicroSubmitInfoEntity);return R.ok().put("wxPayMicroSubmitResult",wxPayMicroSubmitResult);

}else{return R.error(wxPayMicroSubmitResult.getReturnMsg()).put("wxPayMicroSubmitResult",wxPayMicroSubmitResult);

}

}

申请注入接口需要几个前提接口这里一并都列一下:

第一个接口上面的代码已经实现,这里专讲第二个

图片上传接口

下面是 示例代码:

public R uploadMedia(@RequestParam("media") MultipartFile media, WxPayUploadmMediaRequest wxPayUploadmMediaRequest) throwsIOException, WxPayException {

String uploadMediaUrl= this.wxService.getPayBaseUrl() + "/secapi/mch/uploadmedia";//强转成子类

WxPayServiceImpl wxPayService = (WxPayServiceImpl)this.wxService;//计算文件哈希

String medisHash =md5HashCode(media.getInputStream());//设置文件哈希

wxPayUploadmMediaRequest.setMediaHash(medisHash);//微信支付签名

wxPayUploadmMediaRequest.setSignType(WxPayConstants.SignType.HMAC_SHA256);

wxPayUploadmMediaRequest.checkAndSign(this.wxService.getConfig());//创建httpClient

HttpClientBuilder httpClientBuilder = wxPayService.createHttpClientBuilder(true);

HttpPost httpPost=wxPayService.createHttpPost(uploadMediaUrl);

MultipartEntityBuilder multipartEntityBuilder=MultipartEntityBuilder.create();//文件流

multipartEntityBuilder.addTextBody("mch_id", wxPayUploadmMediaRequest.getMchId(), ContentType.MULTIPART_FORM_DATA);

multipartEntityBuilder.addBinaryBody("media", media.getInputStream(), ContentType.IMAGE_JPEG, media.getOriginalFilename());

multipartEntityBuilder.addTextBody("media_hash", wxPayUploadmMediaRequest.getMediaHash(), ContentType.MULTIPART_FORM_DATA);

multipartEntityBuilder.addTextBody("sign_type", wxPayUploadmMediaRequest.getSignType(), ContentType.MULTIPART_FORM_DATA);

multipartEntityBuilder.addTextBody("sign", wxPayUploadmMediaRequest.getSign(), ContentType.MULTIPART_FORM_DATA);

HttpEntity entity=multipartEntityBuilder.build();

httpPost.setEntity(entity);

httpPost.addHeader(HTTP.CONTENT_TYPE,"multipart/form-data; charset=UTF-8");

WxPayUploadMediaResult wxPayUploadMediaResult= null;try(CloseableHttpClient httpClient =httpClientBuilder.build()){

CloseableHttpResponse response=httpClient.execute(httpPost);

String responseString=EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);

wxPayUploadMediaResult= WxPayUploadMediaResult.fromXML(responseString,WxPayUploadMediaResult.class);this.log.info("\n【请求地址】:{}\n【请求数据】:{}\n【响应数据】:{}", uploadMediaUrl, "", responseString);

}catch(Exception e) {throw newWxPayException(e.getMessage(), e);

}finally{

httpPost.releaseConnection();

}//this.wxService.post()

return R.ok().put("mediaId",wxPayUploadMediaResult.getMediaId());

}public staticString md5HashCode(InputStream fis) {try{

MessageDigest MD5= MessageDigest.getInstance("MD5");byte[] buffer = new byte[8192];intlength;while ((length = fis.read(buffer)) != -1) {

MD5.update(buffer,0, length);

}return newString(Hex.encodeHex(MD5.digest()));

}catch(Exception e) {

e.printStackTrace();return null;

}

}

注意这里的multipartEntityBuilder相关配置  很容易出错

关于第三个敏感数据加密这个地方一定要注意一下,要先根据平台证书解密指引 这个接口 解密出来public_key 然后才能成功调用加密方法,官方有示例代码这里就不示例了 。

最后写一下查询进件的状态接口:

接口传入  applymentId 或者 businessCode

public R wxMicroGetstate(@RequestBody WxPayMicroGetStateRequest wxPayMicroGetStateRequest) throwsWxPayException {

wxPayMicroGetStateRequest.checkAndSign(wxPayService.getConfig());

String microSubmitUrl= wxPayService.getPayBaseUrl() + "/applyment/micro/getstate";

String responseContent= wxPayService.post(microSubmitUrl,wxPayMicroGetStateRequest.toXML(),true);

WxPayMicroGetStateResult wxPayMicroGetStateResult= WxPayMicroGetStateResult.fromXML(responseContent,WxPayMicroGetStateResult.class);//判断是否审核通过

if("SUCCESS".equals(wxPayMicroGetStateResult.getReturnCode()) && "SUCCESS".equals(wxPayMicroGetStateResult.getResultCode())){//如果通过则...

return R.ok().put("wxPayMicroGetStateResult",wxPayMicroGetStateResult);

}return R.error(wxPayMicroGetStateResult.getReturnMsg()).put("wxPayMicroGetStateResult",wxPayMicroGetStateResult);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值