精华内容
下载资源
问答
  • 微信支付-商户支付模式一url接口回调-java版,代码清晰,可直接运行
  • 微信支付商户支付模式一)扫码支付接口回调详解,java版,代码清新,用maven搭建SSM服务器,用dom4j解析xml数据,以及生成xml数据
    微信支付(商户支付模式一)扫码支付接口回调详解
    • 获取用户扫描二维码后,微信返回的信息
    InputStream inStream;
    		try {
    			inStream = request.getInputStream();
    			ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
    			byte[] buffer = new byte[1024];
    			int len = 0;
    			while ((len = inStream.read(buffer)) != -1) {
    				outSteam.write(buffer, 0, len);
    			}
    			outSteam.close();
    			inStream.close();
    			String result = new String(outSteam.toByteArray(), "utf-8");
    			//System.out.println(result);
    			/*String xmla = "<xml><appid><![CDATA[wxcb1fe0d]]></appid>"
    					+ "<openid><![CDATA[oBhusSzmARE1xYP9Y]]></openid>"
    					+ "<mch_id><![CDATA[108942]]></mch_id>" + "<is_subscribe><![CDATA[Y]]></is_subscribe>"
    					+ "<nonce_str><![CDATA[jU3nuUAOTTAo]]></nonce_str>"
    					+ "<product_id><![CDATA[ 116027]]></product_id>"
    					+ "<sign><![CDATA[6FFDCCF6AB74DF1220AEEEF4]]></sign>" + "</xml>";*/
    • 获取返回的信息内容中各个参数的值
    Map<String, String> map =ParseXml.callXMLToMap(result);
    			String appid = map.get("appid");
    			String openid = map.get("openid");
    			String mch_id = map.get("mch_id");
    			String is_subscribe = map.get("is_subscribe");
    			String nonce_str = map.get("nonce_str");
    			String product_id = map.get("product_id");
    			String sign = map.get("sign");
    • 封装获取到的信息生成签名并生成参数传送给微信后台获取预支付订单
    Map<String, String> packageParams = new HashMap<String, String>();
    			packageParams.put("appid", appid);
    			packageParams.put("openid", openid);
    			packageParams.put("mch_id", mch_id);
    			packageParams.put("is_subscribe", is_subscribe);
    			packageParams.put("nonce_str", nonce_str);
    			packageParams.put("product_id", product_id);
    			String paternerKey = "KtPNdgMLgpreh0wUbtMeXrXKtZFPLv3i";
    			String packageSign = CreateSign.getSign(packageParams, paternerKey);
    			//System.out.println("签名返回 :" + packageSign);
    			PayUrlBackController.product_id=product_id;
    			int price = 1;//((int) (Float.valueOf(10) * 100));
    			BillNo billNo=billNoService.select(product_id);
    			if(billNo != null){
    				if(billNo.getAmountrmb() != null && billNo.getAmountrmb().length() > 0){
    					DecimalFormat df = new DecimalFormat("0");
    					String a=billNo.getAmountrmb();
    					float b=Float.valueOf(a);
    					//System.out.println(df.format(b*100));
    					price=Integer.valueOf(df.format(b*100));
    				}else{
    					price = 1;
    				}
    			}
    			// 统一下单文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
    			//System.out.println("支付的钱为:"+billNo.getAmountrmb());
    			Map<String, String> params = new HashMap<String, String>();
    			params.put("appid", appid);
    			params.put("mch_id", mch_id);
    			params.put("body", "NO."+product_id);
    			String out_trade_no = product_id;//Long.toString(System.currentTimeMillis());
    			params.put("out_trade_no", out_trade_no);
    			params.put("total_fee", price+"");
    			//params.put("total_fee", "1");
    			params.put("attach", out_trade_no);
    
    			params.put("spbill_create_ip","8.8.8.8");
    			params.put("trade_type", "NATIVE");
    			params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
    			params.put("notify_url", "http://192.168.1.8:8080/WeChat/pay/back");
    			params.put("openid", openid);
    
    			String paysign = CreateSign.getSign(params, paternerKey);
    			params.put("sign", paysign);
    			byte[] byteXml=ParseXml.callMapToXML(params);
    			String pushXml=new String(byteXml,"UTF-8");
    			//System.out.println("返回的xml数据:"+pushXml);
    			String xmlResult=HttpRequest.sendPost("https://api.mch.weixin.qq.com/pay/unifiedorder", pushXml);
    			//System.out.println("prepay_xml:" + xmlResult);
    • 如果获取预支付订单成功prepay_id,然后把成功的信息返回给微信服务器
     Map<String, String> payResult = ParseXml.callXMLToMap(xmlResult);
                String return_code = payResult.get("return_code");
                String result_code = payResult.get("result_code");
                
                if (StrKit.notBlank(return_code) && StrKit.notBlank(result_code) && return_code.equalsIgnoreCase("SUCCESS")&&result_code.equalsIgnoreCase("SUCCESS")) {
                    // 以下字段在return_code 和result_code都为SUCCESS的时候有返回
                    String prepay_id = payResult.get("prepay_id");
                    
                    Map<String, String> prepayParams = new HashMap<String, String>();
                    prepayParams.put("return_code", "SUCCESS");
                    prepayParams.put("appid", appid);
                    prepayParams.put("mch_id", mch_id);
                    prepayParams.put("nonce_str", System.currentTimeMillis() + "");
                    prepayParams.put("prepay_id", prepay_id);
                    String prepaySign = null;
                    if (sign.equals(packageSign)) {
                        prepayParams.put("result_code", "SUCCESS");
                    }else {
                        prepayParams.put("result_code", "FAIL");
                        prepayParams.put("err_code_des", "订单失效");   //result_code为FAIL时,添加该键值对,value值是微信告诉客户的信息
                    }
                    prepaySign =CreateSign.getSign(prepayParams, paternerKey);
                    prepayParams.put("sign", prepaySign);
                    byte[] byteXmls=ParseXml.callMapToXML(prepayParams);
                    String xml=new String(byteXmls);
                    //System.out.println("最终xml:"+xml);
                    //renderText(xml);

    源码地址:http://download.csdn.net/detail/qq_29428121/9869975

    展开全文
  • 微信支付宝多商户解决方案

    千次阅读 2019-02-27 15:38:04
    微信支付宝多商户解决方案 背景 项目目前微信支付宝支付时是直接将款项打到平台账户中,期望可以将款项打到对应的商家账户中。 支付宝 通过查找资料(如何实现一个项目配置多个商户信息付款给对应商户),支付宝给出...

    微信支付宝多商户解决方案

    背景

    项目目前微信支付宝支付时是直接将款项打到平台账户中,期望可以将款项打到对应的商家账户中。

    支付宝

    通过查找资料(如何实现一个项目配置多个商户信息付款给对应商户),支付宝给出两种解决方案:

    1. 将商家支付宝信息保存到平台中,在支付订单时,根据商家信息获取商家的密钥信息。
      该方法需要获取商家的密钥等信息,有一定的风险,支付宝没有提供对密钥等信息的权限控制,但可以通过支付宝签约服务来限制使用服务,同时需要商家自己去申请账户。
      在这里插入图片描述
    2. 支付宝个别接口支持授权操作,商家授权给平台后,平台可以替商家进行操作,但目前只有当面付支持授权,电脑在线支付不支持授权。

    微信

    同支付宝,微信也有两种解决方案:

    1. 同支付宝方案一,获取商家密钥等信息后,通过微信签约服务来限制使用服务。
    2. 可以申请成功微信支付服务商,成为服务商后,可以由服务商添加子商户,在进行付款时,通过子商户号来区分该笔款项的去处。

    微信申请服务商

    参照微信支付服务商接入指引,进行服务商申请。
    参照服务商管理特约商户功能简介,进行添加子商户。
    参照Native开发文档,进行接口修改。

    • 需要注意的是,服务商本身无结算功能,需传入子商户号。服务商号与普通商户号独立存在独立使用,互不冲突,服务商不支持添加已有的商户号为特约商户,且不支持为本主体申请特约商户
    展开全文
  • springboot集成微信支付普通商户版之APP支付 一、说明: 通过引入依赖实现微信支付,是非常方便的,因为SDK已经封装了很多公共的操作,比如签名sign等;以前还会因为字段排序等问题导致签名错误,使用该SDK可以规避...

    springboot集成微信支付普通商户版之APP支付


    一、说明
    通过引入依赖实现微信支付,是非常方便的,因为SDK已经封装了很多公共的操作,比如签名sign等;以前还会因为字段排序等问题导致签名错误,使用该SDK可以规避此类问题。

    巨坑!!!请留意:如果是新开的微信商户号,设置API密钥一定要设置两遍,否则会大概率出现“签名错误”。
    二、准备参数
    1.appid:登陆微信公众平台获取,是申请微信支付时对应公众号的appid;
    在这里登陆微信插入图片描述
    2.mch_id:商户id,登陆微信商户平台获取
    在这里插入图片描述
    3.商户key(API密钥);设置后不能查看,只能重置,所以要保存好,如果是已经设置过了,重置要注意影响范围
    在这里插入图片描述
    三、开发步骤
    1.在pom.xml中引入依赖

    <dependency>
      <groupId>com.github.wxpay</groupId>
      <artifactId>wxpay-sdk</artifactId>
      <version>0.0.3</version>
    </dependency>
    

    2.在MyWechatpayConfig类实现sdk中的WXPayConfig(注意:以下配置要改为自己的)

    public class MyWechatpayConfig implements WXPayConfig {
    
       //appid
       public String getAppID() {
          return "wx112324223";
       }
    
       //商户号
       public String getMchID() {
          return "156988272323";
       }
    
       //API密钥
       public String getKey() {
          return "112233344566788754432dfdkjjhjkjd";
       }
    
       public InputStream getCertStream() {
          return null;
       }
    
       public int getHttpConnectTimeoutMs() {
          return 8000;
       }
    
       public int getHttpReadTimeoutMs() {
          return 10000;
       }
    }
    

    3.主体报文逻辑如下 ;注意:返回给前端的sign一定要重新生成,否则会报错

    public Map<String,String> wechatpayAppPay() throws Exception {
            //设置支付参数
            WXPay wxPay = new WXPay(myWechatpayConfig, WXPayConstants.SignType.MD5,myWechatpayConfig.getUseSandbox());
            Map<String,String> map = new HashMap();
            map.put("body", "你的标题");//
            map.put("out_trade_no","商户订单号");
            map.put("total_fee","金额");
            map.put("spbill_create_ip","ip");
            map.put("notify_url","异步回调地址");
            map.put("trade_type","APP");
            Map<String,String> resultMap = wxPay.unifiedOrder(map);
            Map<String,String> payMap = new HashMap<>();
            if("SUCCESS".equals(resultMap.get("return_code"))){
                if("SUCCESS".equals(resultMap.get("result_code"))){
                    payMap.put("appid",resultMap.get("appid"));
                    payMap.put("partnerid",resultMap.get("mch_id"));
                    payMap.put("prepayid",resultMap.get("prepay_id"));
                    payMap.put("noncestr",WXPayUtil.generateNonceStr());
                    payMap.put("package","Sign=WXPay");
                    payMap.put("timestamp",String.valueOf(System.currentTimeMillis()/1000).substring(0, 10));
                    //重新生成sign
                    String paySign = WXPayUtil.generateSignature(payMap, myWechatpayConfig.getKey());
                    payMap.put("sign",paySign);
                }else{
                    payMap.put("errMsg",resultMap.get("err_code_des"));
                }
            }else{
                payMap.put("errMsg",resultMap.get("return_msg"));
            }
            return payMap;
        }
    

    4.回调处理;注意:一定要返回xml格式的SUCCESS,不然会反复通知

       public String wechatpayNotify(String notifyData) throws Exception {
            // 支付结果通知的xml格式数据
            WXPay wxpay = new WXPay(myWechatpayConfig);
            // 转换成map
            Map<String, String> notifyMap = WXPayUtil.xmlToMap(notifyData);
            System.out.println("notifyMap==========="+notifyMap);
            if("SUCCESS".equals(notifyMap.get("return_code"))) {
                if ("SUCCESS".equals(notifyMap.get("result_code"))) {
                    //验签
                    if (wxpay.isPayResultNotifySignatureValid(notifyMap)) {
                        // 签名正确
                        // 进行处理
                        String out_trade_no = notifyMap.get("out_trade_no");//商户订单号
                        String transaction_id = notifyMap.get("transaction_id");//微信支付订单号
                    }else {
                        // 签名错误,如果数据里没有sign字段,也认为是签名错误
                        System.out.println("微信支付签名错误..................");
                    }
                }
            }
            String backXml= "<xml>"+
                    "<return_code><![CDATA[SUCCESS]]></return_code>"+
                    "<return_msg><![CDATA[OK]]></return_msg>"+
                    "</xml>";
    
            return backXml;
        }
    

    了解更多资讯,请关注此公众号!!!
    在这里插入图片描述

    展开全文
  • 问:微信支付商户号和服务商的区别,以及什么是账户 答: 商户号--同过支付接口可以直接收款; 服务商--不可以直接收款,只有申请了“特约商户”才能收款 账户--就是服务商下面的“特约商户” 问:...

    问: 微信支付的商户号和服务商的区别,以及什么是子账户
    答: 商户号--同过支付接口可以直接收款;

            服务商--不可以直接收款,只有申请了“特约商户”才能收款

            子账户--就是服务商下面的“特约商户”

           


    问:微信支付的服务商有什么优势呢?
    答:在服务商下申请了“特约商户”后,

    “特约商户”只需要提供营业执照、对公收款银行卡等,

    “特约商户”在没有微信“公众号”的情况下,就可以有支付功能了;

    也就是说“特约商户”可以省去注册微信公众号和每年的300元认证费

    但是,服务商的公众号必须每年认证一次,费用300元

     


    问:同一个营业执照可以同时申请商户号和服务商吗?
    答:同一个营业执照可以申请2个微信支付,一个是商户号,一个是服务商但是同一个营业执照不能再作为一个子商户来使用



    问:申请商户号后,又申请服务商,影响商户号收款吗?
    答:申请的商户号,再申请服务商,不影响这个商户的收款,就是这个支付商户能用,服务商也能用,服务商里的子商户一定要添加特约商户才能有收款功能



    问:服务商可以收款吗?
    答:服务商没有支付能力,也不需要开通微信支付,但可以在服务商平台直接用营业执照申请子商户(特约商户),服务商的子商户是可以作为支付账户的!



    问:服务商怎么才能收款?
    答:服务商账号本身不能与消费客户进行结算,要在服务商平台登录账号,创建子商户(特约商户),由特约商户去结算。



    例子:
    比如你要做一个餐饮业的服务商,你可以为接入的每个餐馆创建一个子商户号(需要提供餐馆的营业执照、对公收款银行卡等)。结算的金额直接进入子商户(餐馆老板腰包)。但是服务商是可以看到所需交易记录内容报表的。具体收多少服务费,由服务商和商户约定;特定情形可以在平台设置服务费率。


    问:服务商的“特约商户”也就是子账户有数量限制吗?
    答:服务商新增的子账户是没有数量限制的


    问:“特约商户”和“普通商户”直接不支持转换
    答:也就是说,你的资质可以有2个身份,一个特约商户,一个普通商户;

    不过,服务商不能是特约商户


    问:“特约商户”收款后钱去哪里了?
    答:由于每个商户均为独立结算,所以,特约商户收款后,钱在他的自己的账户里


    更多请参考:

    微信支付服务商模式遇到的问题

    https://www.jianshu.com/p/11b1a558fcef

    展开全文
  • 支付之家网(ZFZJ.CN)7月21日,微信支付推出《微信支付成长计划-智慧经营系列课堂》,同时对外透露,微信支付智慧经营产品支付分正式宣布支持服务商模式。首期“政策与产品能力专场”中,官方团队公布了最新的激励...
  • 微信支付(商户平台)卡券开发文档

    千次阅读 2020-08-24 13:36:40
    文章目录简介代金券代金券分类预充值代金券免充值代金券发券渠道二维码发券营销活动发券高级API接口发券核销方式支付中自动核销券操作指引开发前准备开通代金券权限下载API证书商户平台操作创建代金券激活代金券发放...
  • 2、扫码支付扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。 3、公众号支付公众号支付是用户在微信...
  • 修改了普通商户微信支付demo,使服务商模式微信支付在填写参数正确的情况下直接可以使用,demo中一些修改的地方也打上了注释来区分服务商和子商户的参数,也可以配合下文参考: ...
  • 微信支付-商户后台(4)

    千次阅读 2017-07-28 18:23:32
    今天终于把关于微信的后台以及调试都整好了,不可谓不艰辛啊~~最终的完整代码,请查看我的github,直接git,修改config中的APP_ID,MCH_ID以及MCH_SECRET就可以运行了。简单说一下代码中包含的内容:1. 统一下单功能...
  • 服务商模式下的子商户 统一下单请求中的参数: 1、 appid:服务商的appid 2、 mch_id:服务商商户号 appid和mch_id 都换成服务商的appId 和 服务商的商户号 3、sub_mch_id:子商户商户号 (服务商下的...
  • 本文实例讲述了ThinkPHP框架整合微信支付之刷卡模式。分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付之Native 扫码支付 模式二之后的微信支付系列教程第四篇:微信刷卡支付 本教程跟前三篇教程不...
  • 本文实例讲述了ThinkPHP框架整合微信支付之JSAPI模式。分享给大家供大家参考,具体如下: 目前微信是很火的,微信支付目前很少在网上能看到一系列详细的demo,因此,花一点时间来做一下关于微信支付系列教程, 本次...
  • 最近接触到了微信支付,主要做的是用django实现PC端的Native支付模式,即商户系统页面生成支付二维码,用户用“扫一扫”完成支付的模式,下面简单了解一下微信支付的开发文档。 文章目录微信支付模式分类Native支付...
  • 出现这个提示一般是由于你的商户号没有授权给你的公众号或小程序使用。 解决办法: 1.登录你的商户号后台(https://pay.weixin.qq.com/) 2.点击“产品中心->开发配置->APPID授权管理->新增授权”,进入...
  • 微信支付服务商模式说明

    千次阅读 2020-06-11 15:29:35
    微信支付分为普通商户版,服务商版以及银行服务商版,我们主讲服务商版。...服务商模式比普通商户模式,从下单参数上面来看,主要多了商户号:sub_mch_id(必填),sub_appid和sub_openId(非必填)
  • 微信公众号在社会上的应用越来越广泛,对应的开发需求也日益增长,微信支付是公众号服务的重中之中,下面我来介绍一下关于微信的普通商户子商户两种模式。  普通商户,它的申请入口在微信公众号,它跟微信公众号...
  • 首先,对接微信支付要知道需要什么参数,然后等我们拿到这些需要的参数。就要开始怎么去做。微信有专门的支付dome,可惜我才疏学浅,没怎么看懂(哭泣~)。不过里面的有一些工具类是我们所需要的。 这里我们可以...
  • 微信支付服务商模式采坑记录 微信支付小程序服务商模式的实现,官方文档写的简直格外坑爹.开发文档地址:微信支付小程序服务商模式开发文档 统一下单 几个注意点: 非沙箱环境的下单请求地址是:...
  • 微信支付商户支付密钥key的生成与设置 step1. 设置商户号支付密钥方法如下: 1.申请通过审核后,打开微信发来的邮件。 直接获取微信支付商户号(接口文档中的商户号MCHID);(也叫 受理商ID 填写到...
  • 吐槽一下,看微信支付小微商户的开发文档头都大了,什么是平台证书、什么是商户证书...... 一、获取商户证书 二、获取平台证书
  • OK,继续我的苦逼支付后台开发之路。。经过不断的摸索,最后spring boot应用还真被我整出来了,来看下效果图吧:因为完整的支付申请还没有下来,所以暂时只输出了错误信息,不过起码说明这个网络是跑通了。好了,...
  • 微信支付-商户后台(1)

    千次阅读 2017-07-12 14:59:21
    废话不多说,且来看我如何玩(meng)转(bi)微信商户后台。首先就是环境的搭建,对于如何开发一个后台服务系统,我真的是一窍不通。为此,不得不各种搜索资料,最后,竟然又把我之前舍弃到的eclipse重新拾起来了。。。...
  • 支付账户:appid\mch_id(微信支付商户号)\API密钥\Appsecret
  • 微信商户采用子商户模式 二、参考官方文档 微信普通商户:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 微信服务商:https://pay.weixin.qq.com/wiki/doc/api/app/app_sl.php?chapt...
  • 背景:已完成微信支付商户模式的开发,微信支付需要转换为服务商形式 微信服务商的商户是特约商户,这个特约商户需要由服务商账号在微信服务商平台进行重新申请,不能将旧的商户直接绑定到服务商下面。后续服务...
  • 最近客户有个需求:客户使用微信完成付款后会自动关注微信支付账号绑定的微信公众号这样的场景客户体验不好,提出就只想能使用微信支付功能不要自动关注公众号。 所以就有了以下解决方案; 一、在原有的公众号下申请...
  • 微信支付服务商模式

    千次阅读 2019-03-03 21:24:00
    今天使用微信支付服务商模式开发的时候,遇到了一些。特记录下 https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=9_1 官方的文档,写的真的很难懂。demo也是普通商户的。 在支付的时候。几个参数...
  • 微信服务商子商户支付实现

    千次阅读 2020-10-16 17:16:34
    小程序第三方平台快速认证完成之后,小程序假如平台微信支付服务商号,这样就不用自己去申请“商户平台”针对一些商户还是蛮有好的,服务商添加子商户成功之后,测试微信支付遇到些许问题,经各方努力终于解决,记录...
  • 兄弟们经过不懈的努力与摸索,和于客服的聊天,微信服务商模式子商户支付总结如下 1、服务商的APPID(这个参数的意思是,申请服务上是通过那个微信公众号注册的,就是那个公众号的appid) 2、openid这个参数,普通...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,308
精华内容 2,523
关键字:

微信支付子商户模式