laravel 微信支付即服务,分配服务人员

9 篇文章 0 订阅
1 篇文章 0 订阅

基于laravel框架开发微信支付即服务功能,查询和分配服务人员

一、产品介绍

服务人员,是商家为用户提供服务和转化生意的重要一环。通过支付即服务,商家可在支付完成后为用户推送专属服务人员名片,方便用户快速添加专属服务人员为好友,将线下短时服务转化为线上持续服务,弱联系变为强连接,提升用户体验和商家运营效率。

二、代码实现

1、路由

//查询服务人员
Route::any('queryGuides','GuideController@queryGuides');
//分配服务人员
Route::any('smartGuide','GuideController@smartGuide');

2、实现接口

<?php


namespace App\Http\Controllers\Api\V1;

class GuideController extends BaseController
{

    //微信支付分配的商户号
    private $yfm_mchId = 1595122901;
    //商户API证书序列号serial_no,用于声明所使用的证书
    private $serial_no = '5ACC8B75CB448925171BF4F6AD1D12A890BD736F';
	//门店ID
    $store_id = 20915636;


    //查询服务人员id
    public function queryGuides()
    {
    	
        $url = 'https://api.mch.weixin.qq.com/v3/smartguide/guides?store_id='.$this->store_id;

        $mchid = $this->yfm_mchId;

        $serial_no = $this->serial_no;
		
		//微信支付商户API v3要求请求通过HTTP Authorization头来传递签名。 Authorization由认证类型和签名信息两个部分组成
        $headers = $this->createHeader($url , 'GET',$mchid,$serial_no);

        $res = $this->http_request($url,$params = null,$headers);

        return $res;

    }


    //为订单分配服务人员(即智能向导)
    public function smartGuide()
    {

        $sn = 'PT20200813164609dd12d4e1';
        //服务人员ID
		$guide_id = '01008370080000000001';
//        $url = 'https://api.mch.weixin.qq.com/v3/smartguide/guides/{guide_id}/assign';
        $url = 'https://api.mch.weixin.qq.com/v3/smartguide/guides/'.$guide_id.'/assign';

        $params = [
//            'guide_id' => '01008370080000000001',//此参数通过url传递,不通过json传递
            'out_trade_no' => $sn
        ];


        $mchid = $this->yfm_mchId;

        $serial_no = $this->serial_no;
        $params = json_encode($params,true);

        $headers = $this->createHeader($url , 'POST',$mchid,$serial_no,$params);

        $res = $this->http_request($url,$params,$headers);

        return $res;

    }




	//微信支付商户API v3要求请求通过HTTP Authorization头来传递签名。 Authorization由认证类型和签名信息两个部分组成
    public function createHeader($url,$http_method,$merchant_id ,$serial_no,$body = '')
    {
        $timestamp = time();
        $nonce = $this->randomkeys(32);
		//支付证书位置
        $mch_private_key = base_path() . "/wxpay/apiclient_key.pem";
        $mch_private_key = file_get_contents($mch_private_key);

        $url_parts = parse_url($url);
        $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));

        $message = $http_method."\n".
            $canonical_url."\n".
            $timestamp."\n".
            $nonce."\n".
            $body."\n";

        openssl_sign($message, $raw_sign, $mch_private_key, 'sha256WithRSAEncryption');
        $sign = base64_encode($raw_sign);

        $schema = 'WECHATPAY2-SHA256-RSA2048';
        $token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',
            $merchant_id, $nonce, $timestamp, $serial_no, $sign);


        $header = [
            'Content-Type:application/json',
            'Accept:application/json',
            'User-Agent:*/*',
            'Authorization: '.  $schema . ' ' . $token
        ];
        return $header;
        
    }



    //生成随机字符串
    public function randomkeys($length)
    {
        $pattern = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
        $key = '';
        for($i=0;$i<$length;$i++)
        {
            $key .= $pattern{mt_rand(0,35)};
        }
        return $key;
    }



    /**
     * 调用接口, $data是数组参数
     * @return 签名
     */
    public function http_request($url,$data = null,$headers=array())
    {
        $curl = curl_init();
        if( count($headers) >= 1 ){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        }
        curl_setopt($curl, CURLOPT_URL, $url);

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }



}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP微信支付接口是一种用于在网站或应用程序中实现微信支付功能的工具。它支持服务商模式,在这种模式下,开发者可以代替商户接入微信支付,为商户提供支付服务。 通过PHP微信支付接口,服务商可以实现以下功能: 1. 创建子商户:服务商可以通过接口创建子商户,子商户即代表真实的商户,在微信支付平台注册账号后,获取子商户的商户号。 2. 交易支付:服务商可以通过接口发起交易支付请求,包括拉起微信支付页面、生成二维码等方式。用户在微信内完成支付后,服务商可以获取支付结果,并进行相应的业务处理。 3. 查询交易状态:服务商可以查询某笔交易的支付状态,包括已支付、未支付等。 4. 退款:服务商可以通过接口进行退款操作,将交易金额退还给用户。 5. 订单查询:服务商可以查询某个商户的订单列表,包括交易时间、金额、状态等信息。 6. 结算功能:服务商可以通过接口进行订单的结算操作,将商户的资金结算到指定的银行账户。 总而言之,PHP微信支付接口支持服务商模式,为服务商提供了丰富的支付功能和业务接口,方便服务商代替商户接入微信支付,进行支付和业务管理。服务商可以通过编写PHP代码,调用相应的接口实现支付功能,并根据业务需要进行支付结果查询、退款、结算等操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值