php post 调用接口生成签名

//获取token

    function getToken()

    {

        //创建签名

        $appid  = '应用id';

        $appkey = '应用密钥';

        $timestamp = time();

        $rand= rand(0,100);

    

        $signature = [$appkey=>$appkey,$rand=>$rand,$timestamp=>$timestamp];

        //字典排序

        usort($signature,'strcmp');

 

        $signature = join('',$signature);

        $signature = hash_hmac("sha1", $signature, $appkey);

 

        //获取token

        $url = '请求地址';

 

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL,$url);//设置调用地址

        curl_setopt($curl, CURLOPT_POST, 1);//POST请求

        curl_setopt($curl, CURLOPT_POSTFIELDS, ['appid'=>$appid,'rand'=>$rand,'timestamp'=>$timestamp,'signature'=>$signature]);//携带post请求值

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//返回值输出方式

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

 

        $output = curl_exec($curl);

        $output = json_decode($output,true);

 

        curl_close($curl);

 

        return $output;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 PHP v3 版本调用微信支付的示例代码: ```php <?php /** * 微信支付 V3 版本 PHP 示例代码 * * 注意:此代码仅供参考,请根据实际情况进行修改。 * * @link https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pay/transactions/chapter3_1.shtml 微信支付 V3 版本文档 */ // 设置请求参数 $method = 'POST'; // 请求方法 $url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi'; // 请求地址 $timestamp = time(); // 时间戳 $nonceStr = 'e61463f8efa94090b1f366cccfbbb444'; // 随机字符串 $merchantId = '1234567890'; // 商户号 $serialNo = 'E3B4E6D1F8E4A5B6'; // 商户证书序列号 $privateKeyPath = '/path/to/private/key.pem'; // 商户私钥证书路径 $body = '{"description":"iPad mini 5 Wi-Fi 64G","out_trade_no":"1217752501201407033233368018","amount":{"total":100,"currency":"CNY"},"payer":{"openid":"o3IHGjlXXXXXj1asdlXXXXXXXXXX"},"notify_url":"https://www.example.com/wechatpay/notify"}'; // 请求体 // 生成签名 $signHeaders = [ 'accept' => 'application/json', 'content-type' => 'application/json', 'user-agent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)', 'host' => 'api.mch.weixin.qq.com', ]; $signBody = $method . "\n" . $url . "\n" . $timestamp . "\n" . $nonceStr . "\n" . $body . "\n"; $sign = generateSign($signBody, $signHeaders, $merchantId, $serialNo, $privateKeyPath); // 发送请求 $headers = [ 'accept: application/json', 'content-type: application/json', 'user-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)', 'authorization: WECHATPAY2-SHA256-RSA2048 mchid="' . $merchantId . '",nonce_str="' . $nonceStr . '",signature="' . $sign . '",timestamp="' . $timestamp . '",serial_no="' . $serialNo . '"', ]; $response = sendRequest($method, $url, $headers, $body); // 解析响应 $result = json_decode($response, true); if ($result['code'] == 0 && $result['message'] == 'OK') { echo '预支付会话标识:' . $result['prepay_id']; } else { echo '请求失败:' . $result['message']; } /** * 生成签名 * * @param string $signBody 待签名字符串 * @param array $signHeaders 待签名的 HTTP 头部信息 * @param string $merchantId 商户号 * @param string $serialNo 商户证书序列号 * @param string $privateKeyPath 商户私钥证书路径 * @return string 签名 */ function generateSign($signBody, $signHeaders, $merchantId, $serialNo, $privateKeyPath) { $privateKey = openssl_get_privatekey(file_get_contents($privateKeyPath)); $signature = ''; foreach ($signHeaders as $key => $value) { $signature .= $key . ': ' . $value . "\n"; } $signature .= $signBody; openssl_sign($signature, $sign, $privateKey, OPENSSL_ALGO_SHA256); $signature = base64_encode($sign); return $signature; } /** * 发送请求 * * @param string $method 请求方法 * @param string $url 请求地址 * @param array $headers 请求头部信息 * @param string $body 请求体 * @return string 响应内容 */ function sendRequest($method, $url, $headers, $body) { $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); return $response; } ``` 这段示例代码实现了以下功能: 1. 设置请求参数,包括请求方法、请求地址、时间戳、随机字符串、商户号、商户证书序列号、商户私钥证书路径、请求体等。 2. 生成签名,包括签名字符串、HTTP 头部信息、商户号、商户证书序列号、商户私钥证书等。 3. 发送请求,包括请求方法、请求地址、请求头部信息、请求体等。 4. 解析响应,根据返回结果获取预支付会话标识等信息。 使用此示例代码前,请确保已经获取了微信支付 V3 版本相关证书,并将证书放置到正确的路径下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值