php怎么写支付接口
-
array(
‘app_id’ => ‘xxxxxx’, // 支付宝APPID
‘app_secret’ => ‘xxxxxx’, // 支付宝APP密钥
‘notify_url’ => ‘https://xxx.com//notify.php’, // 支付宝异步通知地址
),
‘wechat’ => array(
‘app_id’ => ‘xxxxxx’, // 微信公众号APPID
‘app_secret’ => ‘xxxxxx’, // 微信公众号APP密钥
‘mch_id’ => ‘xxxxxx’, // 微信商户号
‘notify_url’ => ‘https://xxx.com/notify.php’, // 微信异步通知地址
),
);// 根据支付方式选择支付接口
if($pay_type == ‘alipay’){
alipayPay($price, $order_no);
}elseif($pay_type == ‘wechat’){
wechatPay($price, $order_no);
}else{
echo “不支持的支付方式”;
exit;
}/**
* 支付宝支付接口
* @param float $price 支付金额
* @param string $order_no 订单号
*/
function alipayPay($price, $order_no){
global $pay_config;// 进行支付宝支付流程
// 构造请求参数
$params = array(
‘app_id’ => $pay_config[‘alipay’][‘app_id’],
‘method’ => ‘alipay.trade.page.pay’,
‘notify_url’ => $pay_config[‘alipay’][‘notify_url’],
‘charset’ => ‘utf-8’,
‘timestamp’ => date(‘Y-m-d H:i:s’),
‘version’ => ‘1.0’,
‘biz_content’ => json_encode(array(
‘subject’ => ‘支付宝测试订单’,
‘out_trade_no’ => $order_no,
‘total_amount’ => $price,
‘product_code’ => ‘FAST_INSTANT_TRADE_PAY’,
)),
);// 生成签名
ksort($params);
$string = ”;
foreach($params as $key => $value){
$string .= $key.’=’.$value.’&’;
}
$string = rtrim($string, ‘&’);
$sign = md5($string.$pay_config[‘alipay’][‘app_secret’]);// 拼接参数
$params[‘sign’] = $sign;
$params[‘sign_type’] = ‘MD5’;// 跳转到支付宝支付页面
$url = ‘https://openapi.alipay.com/gateway.do?’.http_build_query($params);
header(‘Location: ‘.$url);
exit;
}/**
* 微信支付接口
* @param float $price 支付金额
* @param string $order_no 订单号
*/
function wechatPay($price, $order_no){
global $pay_config;// 进行微信支付流程
// 构造请求参数
$params = array(
‘appid’ => $pay_config[‘wechat’][‘app_id’],
‘mch_id’ => $pay_config[‘wechat’][‘mch_id’],
‘nonce_str’ => md5(uniqid()),
‘sign_type’ => ‘MD5’,
‘body’ => ‘微信测试订单’,
‘out_trade_no’ => $order_no,
‘total_fee’ => intval($price * 100),
‘spbill_create_ip’ => $_SERVER[‘REMOTE_ADDR’],
‘notify_url’ => $pay_config[‘wechat’][‘notify_url’],
‘trade_type’ => ‘JSAPI’,
‘openid’ => ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxx’,
);// 生成签名
ksort($params);
$string = ”;
foreach($params as $key => $value){
if($value != ”){
$string .= $key.’=’.$value.’&’;
}
}
$string .= ‘key=’.$pay_config[‘wechat’][‘app_secret’];
$sign = strtoupper(md5($string));// 拼接参数
$params[‘sign’] = $sign;// 将参数转换为XML格式
$xml = ‘‘; ‘;
foreach($params as $key => $value){
$xml .= ‘<'.$key.'>‘.$value.’'.$key.'>‘;
}
$xml .= ‘// 发送请求到微信支付统一下单接口
$url = ‘https://api.mch.weixin.qq.com/pay/unifiedorder’;
$response = http_request($url, $xml);// 解析微信支付统一下单接口返回的XML数据
$result = xml_to_array($response);if($result[‘return_code’] == ‘SUCCESS’){
// 生成微信支付的参数
$wechat_params = array(
‘appId’ => $pay_config[‘wechat’][‘app_id’],
‘timeStamp’ => time(),
‘nonceStr’ => md5(uniqid()),
‘package’ => ‘prepay_id=’.$result[‘prepay_id’],
‘signType’ => ‘MD5′,
);// 生成签名
ksort($wechat_params);
$string = ”;
foreach($wechat_params as $key => $value){
$string .= $key.’=’.$value.’&’;
}
$string .= ‘key=’.$pay_config[‘wechat’][‘app_secret’];
$sign = strtoupper(md5($string));// 拼接参数
$wechat_params[‘paySign’] = $sign;// 将参数转换为JSON格式
$wechat_json = json_encode($wechat_params);// 返回JSON数据给前端,用于发起微信支付
echo $wechat_json;
exit;
}else{
echo “微信支付下单失败”;
exit;
}
}/**
* 发送HTTP请求
* @param string $url 请求地址
* @param string $data 请求数据
* @return mixed
*/
function http_request($url, $data = ”){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}/**
* 将XML转换为Array
* @param string $xml XML字符串
* @return mixed
*/
function xml_to_array($xml){
$result = array();
$xml_parser = xml_parser_create();
if(xml_parse_into_struct($xml_parser, $xml, $vals, $index)){
$tagname = ”;
foreach($vals as $tag){
if($tag[‘type’] == ‘open’){
$tagname = $tag[‘tag’];
}elseif($tag[‘type’] == ‘complete’){
$result[$tagname] = $tag[‘value’];
}
}
}
xml_parser_free($xml_parser);
return $result;
}
?>
解释:上述代码使用PHP编写了一个支付接口,支持支付宝和微信支付两种方式。
首先,通过POST方式接收支付金额、订单号和支付方式等参数。
然后,根据支付方式选择对应的支付接口函数,分别为alipayPay和wechatPay。
在alipayPay函数中,首先根据支付宝配置信息构造支付宝支付所需的参数,如app_id、app_secret、notify_url等。然后,生成签名,将参数和签名拼接成URL,最后通过header函数进行页面跳转,将用户重定向到支付宝支付页面。
在wechatPay函数中,首先根据微信配置信息构造微信支付所需的参数,如appid、mch_id、nonce_str、sign_type等。然后,生成签名,将参数转换为XML格式,发送请求到微信支付统一下单接口。接收到返回的XML数据后,解析出prepay_id,然后生成微信支付的参数,包括appId、timeStamp、nonceStr、package和paySign等。最后,将参数转换为JSON格式,并返回给前端,用于发起微信支付。
除此之外,代码还包括了发送HTTP请求的http_request函数和将XML转换为Array的xml_to_array函数。
注意:上述代码中的配置信息(如appId、appSecret、mchId等)应替换为真实的配置信息。另外,支付接口成功后,还需要编写异步通知接口来接收支付结果,并进行相应的处理。
2年前 -
支付接口是指用于在网站或应用程序中实现支付功能的接口,通过该接口可以实现用户支付、订单生成、支付结果回调等功能。在PHP中,可以使用各种支付接口,例如支付宝、微信支付、银联支付等。
下面是使用PHP编写支付接口的一般步骤:
1. 配置支付接口:首先,需要到支付接口的官方网站申请开发者账号,并获取到相应的接口密钥和商户号。然后,在PHP中建立一个配置文件,将这些信息存储到配置文件中,用于后续的调用。
2. 创建支付页面:接下来,使用PHP编写一个支付页面,该页面包含用户选择支付方式、填写订单金额、订单号等信息的表单。当用户提交表单时,将表单数据传递给后台处理。
3. 处理支付请求:在后台,使用PHP接收并处理支付请求。首先,通过配置文件中的信息,将支付请求的参数进行签名等处理。然后,将处理后的参数发送给支付接口服务器,并获取到支付接口的返回结果。
4. 处理支付结果:支付接口服务器会将支付结果通过回调URL的方式通知到后台。在PHP中,可以通过编写一个处理支付结果的回调页面,当接收到支付结果通知时,进行相关的处理,例如更新订单状态、发送邮件通知等。
5. 支付结果页面:最后,在支付完成后,可以将用户重定向到一个支付结果页面,显示支付是否成功,以及订单的详细信息等内容。在PHP中,可以根据支付结果的返回值来判断支付状态,并显示相应的提示信息。
需要注意的是,不同的支付接口可能有不同的使用方法和接口文档,具体的实现方式可能会有所差异。因此,在编写支付接口时,可以参考官方文档和示例代码,确保接口调用的正确性和安全性。
2年前 -
要编写支付接口,通常需要以下几个步骤:
1. 准备工作:
– 确定支付平台:选择使用的支付平台,如支付宝、微信支付、银联等;
– 注册开发者账号:在支付平台注册开发者账号,并获取相应的开发者凭证,如App ID、App Key等;
– 配置支付参数:根据支付平台提供的文档,在应用中配置相应的支付参数,如支付平台的公钥、私钥等;
– 创建测试订单:在支付平台的开发环境中,创建测试订单进行支付接口的调试。2. 编写后端接口:
– 设计接口:根据业务需求,设计支付相关的接口,如创建订单、查询订单、接收支付通知等;
– 编写接口代码:使用服务器端的编程语言,如PHP,编写后端接口的代码,读取请求参数、处理业务逻辑、返回响应结果等;
– 调试接口:使用测试工具或编写测试代码,模拟发送请求,验证接口的正确性和可靠性。3. 编写前端页面:
– 设计支付页面:根据业务需求和用户界面设计规范,设计支付页面的布局、样式和交互;
– 编写前端代码:使用前端的技术,如HTML、CSS、JavaScript,编写支付页面的代码,包括表单提交、异步请求、回调函数等;
– 联调测试:在可信任的测试环境中,测试前端页面与后端接口的交互,确保支付流程的正确性和稳定性。4. 集成支付SDK:
– 下载SDK:根据支付平台提供的文档和示例代码,下载相应的支付SDK;
– 导入SDK:将SDK的库文件导入到项目中,并在代码中引入相关的类和函数;
– 配置SDK参数:根据支付平台的文档,配置SDK的参数,如App ID、App Key、回调地址等;
– 调用支付接口:在业务逻辑中,使用SDK提供的方法调用支付接口,如创建支付链接、发起支付请求等。5. 测试和上线:
– 单元测试:针对支付功能进行单元测试,检查支付接口的正确性和可靠性;
– 整合测试:将支付功能与其他功能进行整合测试,确保支付流程的稳定性和兼容性;
– 上线部署:将代码部署到生产环境,配置相应的服务器和域名,并进行相应的安全设置;
– 监控和优化:监控支付接口的性能和稳定性,及时优化代码和配置,保证支付功能的顺利运行。以上是编写支付接口的一般步骤,具体实施时要根据实际情况进行调整和完善。另外,还需要注意支付平台的文档和要求,确保接口的安全性和稳定性。
2年前