curl -u参数含义及Stripe接口中PHP curl_setopt_array实现方法
curl -u参数含义
curl的-u(全称--user)参数用于指定HTTP基本认证的身份凭证,格式为用户名:密码。
Stripe的API认证规则里,只需要将你的密钥作为用户名,密码字段留空即可,所以示例里才会写成sk_test_xxxx:,末尾的冒号就是代表密码为空。
PHP curl_setopt_array的实现方法
你不需要手动计算Base64编码拼接Authorization头,PHP cURL提供了专门的配置项CURLOPT_USERPWD,直接传入凭证字符串即可,cURL会自动生成对应的Basic认证头,比手动写更稳妥,避免密钥更新后还要重新计算编码的问题。
修改后的代码示例:
// 把密钥单独存变量,后续维护更方便 $stripe_secret = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc'; curl_setopt_array($curl, array( CURLOPT_URL => 'https://api.stripe.com/v1/payment_methods', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', // 新增这行,就是对应-u参数的功能 CURLOPT_USERPWD => $stripe_secret . ':', CURLOPT_POSTFIELDS => 'type=card&card%5Bnumber%5D=4242424242424242&card%5Bexp_month%5D=10&card%5Bexp_year%5D=2022&card%5Bcvc%5D=314', CURLOPT_HTTPHEADER => array( // 原来手动写的Authorization头可以删掉了,cURL会自动生成 'Content-Type: application/x-www-form-urlencoded' ), )); $response = curl_exec($curl); curl_close($curl);
你原有代码里手动编写的Authorization头本身是正确的,和-u参数的效果完全一致,只是用CURLOPT_USERPWD的方式可维护性更高,不容易出现编码错误。
内容的提问来源于stack exchange,提问作者Tomasz
相关产品推荐
相关产品推荐

