精华内容
下载资源
问答
  • 2.开通微信支付服务商平台 特别备注:微信支付API v3要求商户对请求进行签名。微信支付会在收到请求后进行签名的验证。如果签名验证不通过,微信支付API v3将会拒绝处理请求,并返回401 Unauthorized 什么是商户...

    1.下载微信官方的库和SDK

      wechatpay-guzzle-middleware

    在项目目录中,通过composer命令行添加:

    composer require wechatpay/wechatpay-guzzle-middleware

    2.开通微信支付服务商平台

    特别备注:微信支付API v3要求商户对请求进行签名。微信支付会在收到请求后进行签名的验证。如果签名验证不通过,微信支付API v3将会拒绝处理请求,并返回401 Unauthorized

    什么是商户证书?什么是平台证书?

    • “商户证书”是指由商户申请的,包含商户的商户号、公司名称、公钥信息的证书。

    • ”平台证书”是指由微信支付负责申请的,包含微信支付平台标识、公钥信息的证书。

    商户在调用 API 时用自身的私钥签名,微信支付使用商户证书中的公钥来验签。微信支付在响应的报文中使用自身的私钥签名,商户使用平台证书中的公钥来验签。

    平台证书如何获取?

    获取平台公钥、平台序列号
    (证书下载工具)

    地址:https://github.com/wechatpay-apiv3/CertificateDownloader

    下载文件:CertificateDownloader-1.1.jar

    该工具已经通过 Maven 打包成 CertificateDownloader.jar,可在 release 中下载。

    在终端执行:

    这里,必需参数有:
    
        商户的私钥文件,即 -f
        证书解密的密钥,即 -k
        商户号,即 -m
        保存证书的路径,即 -o
        商户证书的序列号,即 -s
    
    非必需参数有:
    
        微信支付证书,用于验签,即 -c
    
    完整命令如:
    
    java -jar CertificateDownloader.jar -k ${apiV3key} -m ${mchId} -f ${mchPrivateKeyFilePath} -s ${mchSerialNo} -o ${outputFilePath} -c ${wechatpayCertificateFilePath}
    
    

    执行成功之后,获取当前平台证书的路径

    ① 获取签名

    $ echo -n -e \
      "GET\n/v3/certificates\n1554208460\n593BEC0C930BF1AFEB40B4A08C8FB242\n\n" \
      | openssl dgst -sha256 -sign apiclient_key.pem \
      | openssl base64 -A
    uOVRnA4qG/MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK+VdEUz2FeIoC+D5sB/LN+nGzX3hfZg6r5wT1pl2ZobmIc6p0ldN7J6yDgUzbX8Uk3sD4a4eZVPTBvqNDoUqcYMlZ9uuDdCvNv4TM3c1WzsXUrExwVkI1XO5jCNbgDJ25nkT/c1gIFvqoogl7MdSFGc4W4xZsqCItnqbypR3RuGIlR9h9vlRsy7zJR9PBI83X8alLDIfR1ukt1P7tMnmogZ0cuDY8cZsd8ZlCgLadmvej58SLsIkVxFJ8XyUgx9FmutKSYTmYtWBZ0+tNvfGmbXU7cob8H/4nLBiCwIUFluw==

    ②最终我们可以组一个包含了签名的HTTP请求了

    $ curl https://api.mch.weixin.qq.com/v3/certificates -H 'Authorization: WECHATPAY2-SHA256-RSA2048 mchid="1900009191",nonce_str="593BEC0C930BF1AFEB40B4A08C8FB242",signature="uOVRnA4qG/MNnYzdQxJanN+zU+lTgIcnU9BxGw5dKjK+VdEUz2FeIoC+D5sB/LN+nGzX3hfZg6r5wT1pl2ZobmIc6p0ldN7J6yDgUzbX8Uk3sD4a4eZVPTBvqNDoUqcYMlZ9uuDdCvNv4TM3c1WzsXUrExwVkI1XO5jCNbgDJ25nkT/c1gIFvqoogl7MdSFGc4W4xZsqCItnqbypR3RuGIlR9h9vlRsy7zJR9PBI83X8alLDIfR1ukt1P7tMnmogZ0cuDY8cZsd8ZlCgLadmvej58SLsIkVxFJ8XyUgx9FmutKSYTmYtWBZ0+tNvfGmbXU7cob8H/4nLBiCwIUFluw==",timestamp="1554208460",serial_no="1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C"'

    执行成功之后,得到平台证书序列号:serial_no ,保存起来

    以上步骤获取了平台的证书路径和平台证书序列号

    以下是实际支付PHP代码:

    ①.发起微信扫码支付,生成待支付二维码

    namespace app\api\controller;
    
    use app\common\controller\Api;
    use GuzzleHttp\Exception\RequestException;
    use GuzzleHttp\HandlerStack;
    use GuzzleHttp\Client;
    use WechatPay\GuzzleMiddleware\WechatPayMiddleware;
    use WechatPay\GuzzleMiddleware\Util\PemUtil;
    use fast\Random;
    
    
    /**
     * 微信服务商多商户支付接口
     */
    class Wechatpay extends Api
    {
        protected $noNeedLogin = [];
        protected $noNeedRight = ['*'];
    
    
        public function _initialize()
        {
            parent::_initialize();
            // 商户相关配置,
            $this->merchantId= Config('site.merchantId'); // 商户号
            // 商户API证书序列号
            $this->merchantSerialNumber= Config('site.merchantSerialNumber');
            // 商户私钥文件路径
            $this->merchantPrivateKey=PemUtil::loadPrivateKey(".".Config('site.wechat_merchantPrivateKey'));
            // 微信支付平台配置,微信支付平台证书文件路径
            $this->wechatpayCertificate=PemUtil::loadCertificate(".".Config('site.wechatpayCertificate'));
    
            // 构造一个WechatPayMiddleware
            $wechatpayMiddleware = WechatPayMiddleware::builder()
                ->withMerchant($this->merchantId, $this->merchantSerialNumber, $this->merchantPrivateKey) // 传入商户相关配置
                ->withWechatPay([ $this->wechatpayCertificate ]) // 可传入多个微信支付平台证书,参数类型为array
                ->build();
    
            // 将WechatPayMiddleware添加到Guzzle的HandlerStack中
            $HandlerStack = new HandlerStack();
            $stack = $HandlerStack::create();
            $stack->push($wechatpayMiddleware, 'wechatpay');
    
            // 创建Guzzle HTTP Client时,将HandlerStack传入,接下来,正常使用Guzzle发起API请求,WechatPayMiddleware会自动地处理签名和验签
            $client = new Client(['handler' => $stack]);
    
            $this->client = $client;
    
        }
    
        /**
         * @ApiTitle    (微信服务商支付生成二维码)
         * @ApiMethod   (POST)
         * @ApiRoute    (/api/wechatpay/wechat_qrcode)
         * @ApiHeaders  (name=token, type=string, required=true, description="请求的TOKEN")
         * @ApiHeaders  (name=sub_appid, type=string, required=true, description="子商户申请的公众号appid")
         * @ApiHeaders  (name=sub_mchid, type=string, required=true, description="子商户的商户号")
         * @ApiHeaders  (name=description, type=string, required=true, description="商品描述")
         * @ApiHeaders  (name=notify_url, type=string, required=true, description="通知地址")
         * @ApiHeaders  (name=goods_tag, type=string, required=true, description="订单优惠标记 示例值:WXG ")
         * @ApiHeaders  (name=total, type=float, required=true, description="待支付总金额")
         * @ApiSummary  (商户Native下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。code_url有效期为2小时,过期后扫码不能再发起支付。)
         */
        public function wechat_qrcode()
        {
            $data = $this->request->post();
            try {
                $resp = $this->client->request(
                    'POST',
                    'https://api.mch.weixin.qq.com/v3/pay/partner/transactions/native', //请求URL
                    [
                        // JSON请求体
                        'json' => [
                            "sp_appid" => Config('site.sp_appid'),  // 服务商申请的公众号appid
                            "sp_mchid" => $this->merchantId,             //服务商户号,由微信支付生成并下发
                            "description" => $data['description'],       //商品描述
                            "notify_url" => $data['notify_url'],         //通知地址
                            "out_trade_no" => Random::numeric(16),       //商户订单号
                            "goods_tag" => $data['goods_tag'],           //订单优惠标记 示例值:WXG
                         
                            "sub_appid" => $data['sub_appid'],            //子商户申请的公众号appid
                            "sub_mchid" => $data['sub_mchid'],            //子商户的商户号,由微信支付生成并下发。
                            "amount" => [
                                "total" => $data['total'] * 100,          //以分为单位
                                "currency" => "CNY",
                            ],
                            "settle_info"=>[
                                "profit_sharing" => true                  //是否指定分账,枚举值 true:是,false:否
                            ]
                        ],
                        'headers' => [ 'Accept' => 'application/json' ]
                    ]
                );
                $statusCode = $resp->getStatusCode();
                if ($statusCode == 200) { //处理成功
                  
                    $url = json_decode($resp->getBody()->getContents(),true);
                    $code_img = Controller('Common')->qrcode($url['code_url'],'wechat_pay_server');
                    $img = urls()."/".$code_img;
                    $this->success('success',$img);
                } else if ($statusCode == 204) { //处理成功,无返回Body
                    $this->success('success');
                }
            } catch (RequestException $e) {
                // 进行错误处理
                $data = [
                    'status'=>  $e->getResponse()->getStatusCode(),
                    'message'=> json_decode($e->getResponse()->getBody(),true)
                ];
                $this->error('ERROR',$data);
            }
        }

    生成微信pc端扫码支付的二维码

    ②. 服务商添加分账接收方API

    /**
         * @ApiTitle    (服务商添加分账接收方API)
         * @ApiMethod   (POST)
         * @ApiRoute    (/api/wechatpay/receivers)
         * @ApiHeaders  (name=token, type=string, required=true, description="请求的TOKEN")
         * @ApiHeaders  (name=sub_mchid, type=string, required=true, description="子商户的商户号,必填")
         * @ApiHeaders  (name=sub_appid, type=string, required=true, description="子商户的appid")
         * @ApiSummary  (服务商发起添加分账接收方请求,建立分账接收方列表。后续可通过发起分账请求,将分账方商户结算后的资金,分到该分账接收方 )
         */
        public function receivers()
        {
            $data = $this->request->post();
            if($data['sub_mchid']=='')
            {
                $this->error('子商户的商户号不能为空');
            }
            $name = $this->getEncrypt('分账房商户名称');
            try {
                $resp = $this->client->request(
                    'POST',
                    'https://api.mch.weixin.qq.com/v3/profitsharing/receivers/add', //请求URL
                    [
                        // JSON请求体
                        'json' => [
                            "sub_mchid" => $data['sub_mchid'],            //分账出资的电商平台二级商户,填写微信支付分配的商户号。
                            "appid"     => Config('site.sp_appid'),  // 服务商申请的公众号appid
                            "sub_appid" => $data['sub_appid'],             // 微信分配的子商户公众账号
                            //MERCHANT_ID:商户ID
                            //PERSONAL_OPENID:个人
                            //openid(由父商户APPID转换得到)
                            //PERSONAL_SUB_OPENID:个人
                            //sub_openid(由子商户APPID转换得到)
                            "type"      => 'MERCHANT_ID',
                            "name"      => $name,                          //分账接收方类型是MERCHANT_ID时,是商户全称(必传)
                            "account"   => $this->merchantId,              //分账接收方账号
                            "relation_type"   => 'SERVICE_PROVIDER',       //与分账方的关系类型
                            "custom_relation" => 'MEETCONF',               //与分账方的关系类型
                        ],
                        'headers' => [
                            'Accept' => 'application/json',
                            'Wechatpay-Serial'=> Config('site.Wechatpay-Serial')
                        ]
                    ]
                );
                $statusCode = $resp->getStatusCode();
                if ($statusCode == 200) { //处理成功
                    $data = json_decode($resp->getBody()->getContents(),true);
                    $this->success('success',$data);
                } else if ($statusCode == 204) { //处理成功,无返回Body
                    $this->success('success');
                }
            } catch (RequestException $e) {
                // 进行错误处理
                $data = [
                    'status'=>  $e->getResponse()->getStatusCode(),
                    'message'=> json_decode($e->getResponse()->getBody(),true)
                ];
                $this->error('ERROR',$data);
            }
        }

    ③.服务商发起请求分账API

    /**
         * @ApiTitle    (服务商发起请求分账API)
         * @ApiMethod   (POST)
         * @ApiRoute    (/api/wechatpay/profitsharing)
         * @ApiHeaders  (name=token, type=string, required=true, description="请求的TOKEN")
         * @ApiHeaders  (name=sub_mchid, type=string, required=true, description="子商户的商户号,必填")
         * @ApiHeaders  (name=sub_appid, type=string, required=true, description="子商户的appid")
         * @ApiHeaders  (name=transaction_id, type=string, required=true, description="微信支付订单号")
         * @ApiHeaders  (name=out_order_no, type=string, required=true, description="商户系统内部的分账单号")
         * @ApiHeaders  (name=amount, type=float, required=true, description="分账金额,单位:元")
         * @ApiSummary  (微信订单支付成功后,由电商平台发起分账请求,将结算后的资金分给分账接收方。)
         */
         /*   注意:
    
            • 微信订单支付成功后,服务商代特约商户发起分账请求,将结算后的钱分到分账接收方。
    
            • 对同一笔订单最多能发起50次分账请求,每次请求最多分给5个接收方。
    
            • 此接口采用异步处理模式,即在接收到商户请求后,会先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取。
    
            • 分账资金的冻结期默认是180天。从订单支付成功之日起,180天内需要发起分账,若180天内未发起分账,待分账资金将会自动解冻给分账方。
         */
        public function profitsharing()
        {
            $data = $this->request->post();
            if($data['sub_mchid']=='')
            {
                $this->error('子商户的商户号不能为空');
            }
            try {
                $resp = $this->client->request(
                    'POST',
                    'https://api.mch.weixin.qq.com/v3/profitsharing/orders', //请求URL
                    [
                        // JSON请求体
                        'json' => [
                            "sub_mchid" => $data['sub_mchid'],            //分账出资的电商平台二级商户,填写微信支付分配的商户号。
                            "appid"     => Config('site.sp_appid'),  // 服务商申请的公众号appid
                            "sub_appid" => $data['sub_appid'],           // 微信分配的子商户公众账号ID
                            "transaction_id" => $data['transaction_id'],  //微信支付订单号
                            "out_order_no" => $data['out_order_no'],      //商户系统内部的分账单号
                            //分账接收方列表,可以设置出资商户作为分账接受方,最多可有50个分账接收方
                            "receivers" => [
                                [
                                    "type"  => 'MERCHANT_ID',  //分账接收方类型,枚举值:MERCHANT_ID:商户PERSONAL_OPENID:个人
                                    "account" => $this->merchantId, //分账接收方账号(当前为服务商自己的商户号)
                                    //分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额。
                                    "amount" => $data['amount'] * 100,
                                    "description" => '分账给服务商'.$this->merchantId, //分账的原因描述,分账账单中需要体现。
                                ],
                            ],
                            /*
                             * 是否解冻剩余未分资金,
                            1、如果为true,该笔订单剩余未分账的金额会解冻回分账方商户;
                            2、如果为false,该笔订单剩余未分账的金额不会解冻回分账方商户,可以对该笔订单再次进行分账。
                            */
                            "unfreeze_unsplit"  => true    //是否解冻剩余未分资金,
                        ],
                        'headers' => [ 'Accept' => 'application/json' ]
                    ]
                );
                $statusCode = $resp->getStatusCode();
                if ($statusCode == 200) { //处理成功
                    $data = json_decode($resp->getBody()->getContents(),true);
                    $this->success('success',$data);
                } else if ($statusCode == 204) { //处理成功,无返回Body
                    $this->success('success');
                }
            } catch (RequestException $e) {
                // 进行错误处理
                $data = [
                    'status'=>  $e->getResponse()->getStatusCode(),
                    'message'=> json_decode($e->getResponse()->getBody(),true)
                ];
                $this->error('ERROR',$data);
            }
        }

    ④. 敏感字符进行加密操作

        /*
         * 敏感字符进行加密操作
         */
        private function getEncrypt($str) {
            //$str是待加密字符串
            $public_key_path = ".".Config('site.wechatpayCertificate');
            $public_key = file_get_contents($public_key_path);
            $encrypted = '';
            if (openssl_public_encrypt($str, $encrypted, $public_key, OPENSSL_PKCS1_OAEP_PADDING)) {
                //base64编码
                $sign = base64_encode($encrypted);
            } else {
                throw new Exception('encrypt failed');
            }
            return $sign;
        }

    展开全文
  • 微信服务商支付功能开的一些感想 玩过微信开发的朋友都知道,要想完成微信支付功能,必须有个已经认证的公众号,开通支付功能后,微信会分配给此公众号一个对应的商户。 商户分为三种,普通商户,境内...

      玩过微信开发的朋友都知道,要想完成微信支付功能,必须有个已经认证的公众号,开通支付功能后,微信会分配给此公众号一个对应的商户。 商户分为三种,普通商户,境内服务商,境外服务商。我们开发中使用最多的可能就是普通商户。

    下面我们来说一说什么是境内服务商?

      服务商说白了,就是中间商,下面会有很多子商户(即特约商户),说白了,就是微信引流的一种方式(现在,支付宝的口碑,微信都在抢占支付市场,想把支付渗透到各行各业,而单靠一般的地推方式可能还不足以将所有线下的行业纳入进来。这个时候就需要找手头上拥有一些客户资源的商户作为中间商,将下面的商户引进来:比如我是一家做餐饮服务的软件商,手底下有很多餐饮店的客户需要找我做微信公众号的服务及支付,那么我将自己的公众号申请为服务商,和这些餐饮店达成协议成为我的特约商户,那么餐饮店的每一笔微信支付收入都会成为我找微信平台返点的依据。目前口碑也是如此,好像返点力度比微信要大)。

      好了,话说回来。因为目前公司有这方面需求,所以也在这方面小试了一把,(微信有点坑的就是,本来很多普通商户已经申请了微信公众号也具备支付功能,那人家凭什么做你的特约商户,而且成为你的特约商户又得提交一遍资料进行审核)。这里我只是做了公众号支付的测试

          同理,微信也会提供服务商支付的API。对比会发现,普通商户与服务商的统一下单接口的差异就是:

          服务商多了一个sub_appid(子商户的公众号开发ID),sub_mch_id(子商户的商户号),sub_openid(用户对子商户公众号的openId)

          虽然每个字段有了说明,但是发现微信给出的API示例居然完全一样,这个时候就需要自己一步一步试探了。

          首先,作为服务商,我得在服务商功能下添加一家特约服务商,这个时候微信会生成一个子商户号

          于是,我将我的服务商appid,mch_id,及子商户sub_appid,sub_mch_id,sub_openid(通过sub_appid获取到的openid),这时会提示没有关联服务商。

          那是因为,子商户的appid不是系统 给的,而是需要手动添加的。加上就可以了

          对于这个功能,继续研究

     

    posted on 2018-01-10 10:25  嗨波 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/colin2011/p/8257232.html

    展开全文
  • 支付文档链接:服务商支付链接 个人理解:根据个人接过的微信接口,几乎都是将参数放入Map,签名,然后转成XML,发送请求给微信,差不多就这样,复杂的就中间加点7788地操作,有些需要证书的就使用含有SSL的请求...

    背景

    最近项目中需要用到服务商的分账功能,因为是服务商的分账,所以需要使用服务商的支付,其中遇到了一个支付签名错误问题,在这里记录一波。

    文档 + 个人理解

    支付文档链接:服务商支付链接

    个人理解:根据个人接过的微信接口,几乎都是将参数放入Map,签名,然后转成XML,发送请求给微信,差不多就这样,复杂的就中间加点7788地操作,有些需要证书的就使用含有SSL的请求即可,下次可能会写

    做过普通商户的看这

    参数按照文档上的传,但是在第二次生成签名时,传的appId是子商户关联的appId,如果传的和第一次一样,就会出现支付签名错误,这两天在微信支付社区看了看,有这种错误但是一直没说法,所以如果有支付签名错误的可以看看是否是这个问题。

    没做过普通商户的看这

    直接贴代码,先把对应参数改了,得出参数然后写个按钮支付一下,支付成功再说

    jar包:

    <dependency>
        <groupId>com.github.wxpay</groupId>
        <artifactId>wxpay-sdk</artifactId>
        <version>0.0.3</version>
    </dependency>
    
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.3.8</version>
    </dependency>

    代码:

    import cn.hutool.core.util.IdUtil;
    import cn.hutool.http.HttpRequest;
    import com.github.wxpay.sdk.WXPayConstants;
    import com.github.wxpay.sdk.WXPayUtil;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author: bb
     * @createDate: 2020/7/7
     * @version: 1.0
     */
    public class PayUtil {
    
        public static void main(String[] args) throws Exception {
            unifiedorder();
        }
    
        /**
         * JSAPI下单:服务商
         */
        public static Map<String, String> unifiedorder() throws Exception {
            Map<String, String> params = new HashMap<>();
            params.put("appid", "服务商商户号的appid - 就是哪个公众号/小程序关联了这个商户号");
            params.put("mch_id", "服务商户号");
            params.put("sub_mch_id", "子商户号(特约商户) - 钱到账的商户号");
            //    不用这个,这个是服务商关联的appid下的openId,而我们通常是需要关联到某个小程序上的openId
    //      params.put("openid", "该用户在服务商绑定的appid下的openid");
            //    用这个
            params.put("sub_appid", "服务商关联小程序的appid");
            params.put("sub_openid", "小程序下");
            params.put("nonce_str", WXPayUtil.generateNonceStr());  //  随机字符串
            params.put("body", "消息体,就是显示在支付后微信发消息给你的那上面的标题");
            String outTradeNo = IdUtil.fastSimpleUUID();    //  随机生成的订单号
            params.put("out_trade_no", outTradeNo);
            params.put("total_fee", "1");   //  总金额 - 单位:分
            params.put("trade_type", "JSAPI");  //  我用的是JSAPI
            params.put("profit_sharing", "Y");  //  允许分账,不填默认不允许
            params.put("notify_url", "https://edu.zxtnet.com/");    //  回调url需添加,否则好像会报错,要是外网能访问的 - 是否需要配置看情况
            String sign = WXPayUtil.generateSignature(params, "商户号的密钥");
            params.put("sign", sign);
            String reqXml = WXPayUtil.mapToXml(params);
            String resXml = HttpRequest.post(WXPayConstants.UNIFIEDORDER_URL).body(reqXml).execute().body();
            System.out.println("res:" + resXml);
            Map resultMap = WXPayUtil.xmlToMap(resXml);
            String prepay_id = (String) resultMap.get("prepay_id");
            Map<String, String> paySignMap = new HashMap<>();
            paySignMap.put("appId", (String) resultMap.get("sub_appid"));   //  这里就是子商户号关联的appId,你不写,在调用下单请求后会作为sub_appid返回
            paySignMap.put("nonceStr",  WXPayUtil.generateNonceStr());
            paySignMap.put("package", "prepay_id=" + prepay_id);
            paySignMap.put("signType", "MD5");
            paySignMap.put("timeStamp", String.valueOf((System.currentTimeMillis() / 1000)));
            String paySign = WXPayUtil.generateSignature(paySignMap, "商户号的密钥");
            paySignMap.put("paySign", paySign);
            paySignMap.forEach((x, y) -> {
                System.out.println(x + " --- " + y);
            });
            return paySignMap;
        }
    }

    分账

    支付成功后,才可以继续使用分账功能,记住要设置为允许分账,否则不可以分账

     

     

    小结

    服务商的JSAPI支付和普通商户的JSAPI支付,调用接口都是一样的,只不过参数不一样,根据文档来就行,不过重要的是在服务商JSAPI中获取paySign时,用的appId是子商户的,如果不知道,根据我代码中那样获取sub_appid就行,否则就会报支付签名错误,昨天晚上就是一直卡在支付签名错误这里。

    而且如果遇到错误的时候,注意要看请求回来的返回值是否有提示等内容,这样可以根据里面来进行排错,像我早上就不知道到底是哪个appId,然后看到返回值中有个sub_appid我就试了一下,结果就出来了;而且这里微信好像没说明,所以就搞得很难受,吃一堑长一智。

                                                                                                                                                                          2020-7-7 19:47

     

    展开全文
  • 微信服务商开发----

    本人前几天做微信服务商支付,在官方上没有找到任何的配置!!!!

    诶.....在一个论坛找到了希望!

    服务商的意思是:

    开通好多子账户,具体微信内设置!

           子账户最重要的是 商户ID!

    所有的交易都必须桐乡



    具体代码如图:




    展开全文
  • 最近很火的Thinkphp内核小微支付服务商专用源码, 采用Thinkphp框架开发,完全开源,...目前市面最火的模式,微信服务商集成系统,可向用户提供微信小微商户进件及支付Api 可以线上支付,5分钟即可入驻一个微信商户。
  • Thinkphp内核2020最新微信支付服务商专用整站源码 微信服务商集成系统
  • 一、微信服务商模式下,在线支付处理 在服务商模式下做支付,比较绕一点。 开发前提: 1.服务商通过拖展,为商户注册小程序,并认证开通微信支付 2.服务商 》特约商户管理》配置 小程序appid 和服务商关联 3....
  • 微信服务商下各种支付

    千次阅读 2017-04-09 22:10:22
    微信服务商下微信扫码、公众号、刷卡支付Demo。 推荐阅读 微信、支付App支付开源项目欢迎Start PR 微信开发之扫码支付 微信开发之刷卡支付 微信开发之现金红包 微信开发之公众号支付 Android版-微信APP...
  • 【小微商户】微信小微商户支付系统 小微支付平台 支持1个帐号多个商户 微信服务商专用支付系统源码 本源码采用Thinkphp框架开发,完全开源,你拿到的源码都可以自己做二开,无加密! 目前市面最火的模式,微信服务商...
  • 微信服务商子商户支付

    千次阅读 2020-07-01 17:57:55
    兄弟们经过不懈的努力与摸索,和于客服的聊天,微信服务商模式的子商户支付总结如下 1、服务商的APPID(这个参数的意思是,申请服务上是通过那个微信公众号注册的,就是那个公众号的appid) 2、openid这个参数,普通...
  • 微信支付APP支付服务商模式

    千次阅读 2019-11-23 11:37:38
    微信的文档无力吐槽。各种设置凌乱繁杂,我已经记不清正确的操作...服务商的商户号MchId,通过在微信支付服务商平台申请服务商获得。 服务商的APPID(这个是关键!!这个是关键!!这个是关键!!),通过微信公...
  • 微信服务商子商户支付实现

    千次阅读 2020-10-16 17:16:34
    小程序第三方平台快速认证完成之后,小程序假如平台微信支付服务商号,这样就不用自己去申请“商户平台”针对一些商户还是蛮有好的,服务商添加子商户成功之后,测试微信支付遇到些许问题,经各方努力终于解决,记录...
  • 支付宝服务商模式代支付: 参考: https://docs.open.alipay.com/20160728150111277227/intro ... ...微信服务商模式代支付: 参考:https://pay.weixin.qq.com/wiki/doc/api/micropay_sl....
  • 一些学员看过子恒老师...能不能提供一份微信服务商开发能力说明文档模板大家参考。 说实话, 这个开发能力说明文档的模板还真不好写, 因为每个行业不同, 后面在微信开发中的效果也不一样。 但是子恒老师跟你分享
  • 微信支付服务商jsapi支付demo.zip
  • 微信服务商开发能力说明文档

    万次阅读 多人点赞 2019-10-22 13:21:35
    在申请微信公众号——服务号的时候会用到这...服务简述:成为服务商后,我公司主要为本地商家提供微信支付收银软件和收银机具的开发,帮商家申请微信支付,并为商家提供智慧收银解决方案。 总结:其实我们公司的...
  • 支付之家网(ZFZJ.CN)7月21日,微信支付推出《微信支付成长计划-智慧经营系列课堂》,同时对外透露,微信支付智慧经营产品支付分正式宣布支持服务商模式。首期“政策与产品能力专场”中,官方团队公布了最新的激励...
  • 1.检查签名是否能通过“微信支付接口签名校验工具”:...2.统一下单接口需要对签名进行二次签名后才可供吊起微信支付接口使用 //二次签名只需如下参数即可 MD5.Encode( "appId=" + sub_appid + "&nonceStr...
  • 微信支付服务商jsapi支付demo
  • 公众号支付验收用例,我只做了一个用例,第2个用例困难重重,需要设置0.01元充值代金券和0.02元免充值代金券,但在服务商支付后台设置的充值代金券最低不能少于1元,所以我也不知道怎样能通过验收了,那我放弃验收行...
  • 最近公司接了个澳洲电商App项目,其中涉及到澳洲那边的微信支付宝支付,所以去研究了一下微信境外支付,发现境外只支持服务商模式,即客户需要去与澳洲本地服务商合作,由客户提供材料,服务商帮客户申请支付相关...
  • 微信支付服务商支付功能开发,扫码支付实例,已经调式好的代码
  • 微信支付服务商接入指引 本文主要针对服务商下特约商户的小程序支付进行讲解。(扫码支付, h5支付大致流程都差不多,了解了小程序支付能够很快接入其他支付类型) 说明:本文中的支付都是指在服务商模式下 支付主体...
  • 微擎插件,服务商进件,微信支付
  • 由于signType不是直接设置的服务商平台的间接加密方式“RSA”,而是获取后台返回的参数RSA。调起支付后一直都报验签错误。 直接设置signType:“RSA”,通过!!!同理,MD5也一样。 ...
  • Unity接入微信登录 微信分享 微信支付 支付宝支付 广州市码锋网络有限责...
  • V2 版支付(商户/服务商) V2 版分账(商户/服务商) V2 版企业付款到零钱 V3 版支付即服务 安装包 go get -u github.com/wleven/wxpay 查看文档 // 执行命令 godoc -http=:8888 -play // 浏览器打开文档 ...
  • 微信刷卡支付| 服务商|子商户 微信刷卡支付| 服务商|子商户 微信刷卡支付| 服务商|子商户 微信刷卡支付| 服务商|子商户 微信刷卡支付| 服务商|子商户
  • 1、微信服务商微信支付开发,统一下单:它与微信支付的区别在于多了小程序的APPID(sub_appid)、子商户号(sub_mch_id)、用户子标识(sub_openid)这几个字段,其他都一样。但是注意的是服务商的APPID(appid)是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,823
精华内容 8,329
关键字:

微信服务商支付