首页后端开发JAVA微信支付V3

微信支付V3

时间2023-12-08 15:25:03发布访客分类JAVA浏览1145
导读:use GuzzleHttp\Client; class WxPay { private $appId = 'wxd3073***045a'; private $mchId = '149***8522'; priv...

use GuzzleHttp\Client;


class WxPay
{
    
    private $appId = 'wxd3073***045a';
    
    private $mchId = '149***8522';
    
    private $notifyUrl = 'http://a.com';
    
    private $apiclientKey = '';
    
    private $client;
    
    private $serialNo = '5C758F2A5***DA29944CA4938';


    public function __construct()
    {
    
        $this->
    apiclientKey = file_get_contents('apiclient_key.pem');
    
        $this->
    client = new Client([
            'base_uri' =>
     'https://api.mch.weixin.qq.com',
            'timeout' =>
     5,
            'verify' =>
     false,
            'http_errors' =>
     false,
        ]);

    }


    public function getSign($data)
    {
    
        $str = implode("\n", array_merge($data, ['']));
    
        openssl_sign($str, $signature, $this->
    apiclientKey, OPENSSL_ALGO_SHA256);
    
        return base64_encode($signature);

    }


    // JSAPI下单 description,out_trade_no,amount,payer
    public function jsapi($param)
    {
    
        $method = 'POST';
    
        $api = '/v3/pay/transactions/jsapi';
    
        $timestamp = time();
    
        $nonce = uniqid();
    

        $data = array_merge($param, [
            'appid' =>
     $this->
    appId,
            'mchid' =>
     $this->
    mchId,
            'notify_url' =>
     $this->
    notifyUrl,
        ]);
    

        $authorization = $this->
    getAuthorization($method, $api, json_encode($data));
    

        $r = $this->
    client->
    request($method, $api, [
            'headers' =>
     [
                'Accept' =>
     'application/json',
                'Content-Type' =>
     'application/json',
                'Authorization' =>
     $authorization,
            ],
            'json' =>
     $data
        ]);
    

        $res = json_decode($r->
    getBody()->
    getContents(), 1);
    
        if (!isset($res['prepay_id'])) return $res;
    

        $package = 'prepay_id=' . $res['prepay_id'];
    
        $paySign = $this->
    getSign([$this->
    appId, $timestamp, $nonce, $package]);
    

        return [
            'appId' =>
     $this->
    appId,
            'timeStamp' =>
     $timestamp,
            'nonceStr' =>
     $nonce,
            'package' =>
     $package,
            'signType' =>
     'RSA',
            'paySign' =>
     $paySign,
        ];

    }


    // 商户订单号查询订单
    public function findOrder($orderNo)
    {
    
        $method = 'GET';

        $api = "/v3/pay/transactions/out-trade-no/{
$orderNo}
?mchid={
    $this->
mchId}
    ";
    
        $authorization = $this->
    getAuthorization($method, $api);
    

        $r = $this->
    client->
    request($method, $api, [
            'headers' =>
     [
                'Accept' =>
     'application/json',
                'Authorization' =>
     $authorization,
            ]
        ]);
    

        return $r->
    getBody()->
    getContents();

    }


    public function getAuthorization($method, $api, $body = '')
    {
    
        $timestamp = time();
    
        $nonce = uniqid();
    
        $signature = $this->
    getSign([$method, $api, $timestamp, $nonce, $body]);
    
        $authorization = sprintf(
            'WECHATPAY2-SHA256-RSA2048 mchid="%s",serial_no="%s",timestamp="%s",nonce_str="%s",signature="%s"',
            $this->
    mchId, $this->
    serialNo, $timestamp, $nonce, $signature
        );
    

        return $authorization;

    }

}
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 微信支付V3
本文地址: https://pptw.com/jishu/573430.html
Linux中给php安装ssh2拓展 根据markdown文件反向转换成chrome浏览器书签html

游客 回复需填写必要信息