1. 必读 ,第三方服务商申请自己的服务号appid,并通过该服务号appid申请服务商mch_id,以此获得微信支付服务商能力。再通过服务商mch_id为所服务的特约商户申请创建微信支付sub_mch_id,创建好的sub_mch_id默认和服务商的mch_id建立父子授权关系。以此来使用微信支付提供的开放接口,对特约商户及用户提供服务。同时,微信支付为服务商模式下的每一条“mch_id-sub_mch_id父子授权关系”上,都开放了一些开发配置能力供服务商配置,包括不限于支付授权目录、推荐关注的appid、sub_appid等。拿小程序支付举例,服务商订单由哪个小程序调用js拉起支付,则需要在特约商户开发配置中将该小程序appid配置成sub_appid。每条父子关系上的sub_appid可以为多,用以满足不同的场景需求,但每笔交易只能使用1个;
  2. 注意,sub_appid使用说明:sub_appid可为公众号,APP或小程序的appid,服务商在服务商商户平台可手动为每个特约商户绑定与渠道商主体或特约商户主体一致的公众号,APP或小程序的appid;针对小程序,还支持绑定服务商主体的小程序appid。目前最多配置5个. 手工配置路径:”服务商商户平台-服务商功能-子商户管理-开发配置-特约商户APPID配置”

小结
1、问题:sub_appid与sub_mch_id不一致,
解决办法:在服务商功能对特约商户进行小程序授权sub_appid.
2、问题:微信公众号支付支付验证签名失败,
解决办法:在生成prepay_id的时候传入的APPID必须是小程序的。

小程序发起支付

 wx.request({url: 'wxUnifiedOrder',//后台请求获取支付请求参数method: 'POST',data: data,header: {'Accept': 'application/json'},success: function (obj) {wx.requestPayment({'timeStamp': ''+obj.data.obj.timeStamp,'nonceStr': obj.data.obj.nonceStr,'package': obj.data.obj.packageStr,'signType': obj.data.obj.signType,'paySign': obj.data.obj.paySign,'success': function (res) {console.info('success ' + JSON.stringify(res));},'fail': function (res) {console.info('fail ' + JSON.stringify(res));},'complete': function (res) {console.info('complete ' + JSON.stringify(res));}})}})

后台获取微信签名返回数据

     WxMerchant wxMerchant=wxMerchantMapper.getByEntId(entId);AbsWxPayConfig config = WXPayConfigImpl.getInstance();if(isMiniApp) {config = WXMiniPayConfigImpl.getInstance();}WXPay wxpay = new WXPay(config, false, config.getUseSandbox());logger.info("wx.body=" + ResourceUtil.getConfig("wx.body"));HashMap<String, String> data = new HashMap<String, String>();if (tradeMode==TradeMode.PLAT.value()) { //平台模式data.put("sub_openid", openid);//商户为特约商户IDdata.put("sub_mch_id", wxMerchant.getMerId());}else {//企业公众号模式WxOfficialAccount wxOfficialAccount = wxOfficialAccountMapper.getByEntId(entId);data.put("sub_appid", wxOfficialAccount.getAppid());data.put("sub_openid", openid);//普通商户IDdata.put("mch_id", wxMerchant.getMerId());}data.put("body", ResourceUtil.getConfig("wx.body"));data.put("out_trade_no", payment.getPaymentNo());data.put("device_info", "");data.put("fee_type", "CNY");data.put("total_fee", amt.toString());data.put("spbill_create_ip", clientIP);data.put("notify_url", ResourceUtil.getConfig("wx.notify_url"));data.put("trade_type", "JSAPI");// data.put("openid", openid);Map<String, String> r = wxpay.unifiedOrder(data);logger.info(r.toString());Map<String, String> retMap = new HashMap<String, String>();if (r.get("return_code").equals("FAIL")) {Payment p = new Payment();p.setPaymentId(payment.getPaymentId());p.setStatus(Status.FAIL.value());p.setRemark(r.get("return_msg"));paymentMapper.updateByPrimaryKeySelective(p);retMap.put("success", "false");retMap.put("msg", p.getRemark());return retMap;} else {if (r.get("result_code").equals("FAIL")) {Payment p = new Payment();p.setPaymentId(payment.getPaymentId());p.setStatus(Status.FAIL.value());p.setRemark(r.get("err_code") + r.get("err_code_des"));paymentMapper.updateByPrimaryKeySelective(p);retMap.put("success", "false");retMap.put("msg", p.getRemark());return retMap;} else {Payment p = new Payment();p.setPaymentId(payment.getPaymentId());p.setStatus(Status.RET.value());p.setRemark("prepay_id=" + r.get("prepay_id"));paymentMapper.updateByPrimaryKeySelective(p);// String timeStamp=String.valueOf(System.currentTimeMillis()/1000);Long timeStamp = System.currentTimeMillis() / 1000;String nonceStr = WXPayUtil.generateNonceStr();logger.info("appid=" + config.getAppID());logger.info("r.appid=" + r.get("appid"));retMap.put("success", "true");retMap.put("appId", "小程序appId");retMap.put("timeStamp", String.valueOf(timeStamp));retMap.put("nonceStr", nonceStr);retMap.put("package", "prepay_id=" + r.get("prepay_id"));retMap.put("signType", config.getSignTypeStr());//生成prepay_id的时候传入的APPID是小程序自身的APPID,不然会报出“支付验证签名错误”Map<String, String> retData = new HashMap<String, String>();retData.put("appId", "这里传入小程序APPID");retData.put("timeStamp", retMap.get("timeStamp"));retData.put("nonceStr", retMap.get("nonceStr"));retData.put("package", retMap.get("package"));retData.put("signType", retMap.get("signType"));logger.info(retData.toString());String paySign = WXPayUtil.generateSignature(retData, config.getKey(), SignType.HMACSHA256);retMap.put("paySign", paySign);return retMap;}}

第三方支付(服务商模式)相关推荐

  1. 微信支付服务商模式说明

    微信支付分为普通商户版,服务商版以及银行服务商版,我们主讲服务商版. 官方地址:https://pay.weixin.qq.com/wiki/doc/api/sl.html 微信支付服务商模式 如果把 ...

  2. “第三方支付”盈利模式

    "互联网金融"源头--第三方支付."第三方支付"作为资金支付结算的环节,按发展历程分为:"线下支付"."线上支付"和&q ...

  3. 微信支付---服务商模式--付款码支付(PHP)

    微信支付-服务商模式–付款码支付(PHP) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 微信文档地址 https://pay ...

  4. .NetCore支付宝支付-服务商模式(saas)

    准备工作 介绍 支付宝服务商模式,可以替商户完成收款功能,商户无需自己研发即可完成收款功能.基于saas企业开发可以采用此种模式替商户完成支付流程 引入如下Nuget包依赖 <PackageRe ...

  5. .NetCore微信支付+服务商模式(saas)

    准备工作 介绍 微信服务商模式,可以替商户完成收款功能,商户无需自己研发即可完成收款功能.基于saas企业开发可以采用此种模式替商户完成支付流程 引入如下Nuget包依赖 <PackageRef ...

  6. 微信支付APP支付服务商模式

    微信的文档无力吐槽.各种设置凌乱繁杂,我已经记不清正确的操作步骤了,只能整理一些必要的配置. 服务商模式的APP支付需要用到这几个关键参数:服务商的APPID.服务商的商户号MchId.子商户的Sub ...

  7. 微信支付服务商模式——前期准备

    目录 前言 微信支付的四种模式 成为服务商 登录服务商 商户入驻 从页面入驻 调用API方式入驻 重要的参数 APPID mchid sub_mchid APIv3 key Private key M ...

  8. 实战APP微信支付服务商模式(一个APP多个商户收款)

    由于项目需要对接微信支付功能,需求是:一个APP实现不同商户进行收款,花时间去研究了下官方文档,决定采用微信支付APP服务商模式进行实现,开发时也踩了不少坑(参数顺序及大小写.签名的加密方式等),这里 ...

  9. 微信支付服务商模式开发流程

    背景:已完成微信支付商户模式的开发,微信支付需要转换为服务商形式 微信服务商的子商户是特约商户,这个特约商户需要由服务商账号在微信服务商平台进行重新申请,不能将旧的商户直接绑定到服务商下面.后续服务商 ...

  10. 微信支付服务商模式下的支付-特约商户-----亲试有效

    微信小程序 服务商模式下的子商户 统一下单请求中的参数: 1. appid:服务商的appid 2. mch_id:服务商商户号 appid和mch_id 都换成服务商的appId 和 服务商的商户号 ...

最新文章

  1. php智能客服,智能客服系统
  2. 实时OLAP分析利器Druid介绍
  3. vue中请求接口怎么封装公共地址_vue请求接口的封装
  4. 面试准备每日五题:C++(二)——mallocnew、宏、volatile、constvolatile、(a)和(a)
  5. 自己定义View学习之12/7(进度条之混合模式)
  6. 供应商主数据和客户主数据各个字段进行显示、必输、隐藏和可选输入的配置学习...
  7. 关于调用ArcGIS中GP工具.Erase、SymDiff
  8. 文字处理技术:布局绘制的方向有哪些?
  9. Unity-人物移动
  10. 蓝光三维扫描仪用于钢板焊接变形全尺寸测量
  11. 如何只用电脑登录微信
  12. FFFfrance博客介绍
  13. Handing time
  14. dex2oat过程对系统性能的影响
  15. 基于Java+SpringBoot+Thymeleaf+Mysql医院预约挂号系统设计与实现
  16. 带你认识世界最值钱的十种货币
  17. 手机内存卡照片删了怎么恢复
  18. 领先农业技术平台Dimitra,帮助小农户实现农业现代化
  19. 联想ThinkBook 16+ 2023款 评测
  20. 计算机 教学活动设计方案,精选教学设计方案汇编5篇

热门文章

  1. 高射炮打蚊子丨在VS 2017里用C语言写经典的冒泡排序
  2. Java -- 每日一问:谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
  3. PHP 视频格式转换类
  4. 如何将LaTeX公式拷贝到Word中
  5. 临时增大 tmp 空间
  6. 计蒜客 青出于蓝胜于蓝 dfs序+树状
  7. python 3 12306余票查询脚本
  8. C# CS客户端不显示垂直滚动条
  9. SQL语句中对时间字段进行区间查询
  10. Android使用DragAndDrop拖拽效果实现宫格位置变换