支付宝php sdk如何使用,支付宝SDK怎么用啊?

支付宝SDK使用说明

支付宝SDK说明

$c = new AopClient;

$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";

$c->appId = "app_id";

$c->privateKey = "your private_key";

$c->format = "json";

$c->charset= "GBK";

$c->alipayPulicKey = "alipay_public_key";

//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modify

$req = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();

//SDK已经封装掉了公共参数,这里只需要传入业务参数

//此次只是参数展示,未进行字符串转义,实际情况下请转义

$request->bizContent = "{

"primary_industry_name":"IT科技/IT软件与服务",

"primary_industry_code":"10001/20102",

"secondary_industry_code":"10001/20102",

"secondary_industry_name":"IT科技/IT软件与服务"

}"

$response= $c->execute($req);

但是总是返回 缺少签名参数,有没有详细的接口说明?

回复内容:

支付宝SDK使用说明

支付宝SDK说明

$c = new AopClient;

$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";

$c->appId = "app_id";

$c->privateKey = "your private_key";

$c->format = "json";

$c->charset= "GBK";

$c->alipayPulicKey = "alipay_public_key";

//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modify

$req = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();

//SDK已经封装掉了公共参数,这里只需要传入业务参数

//此次只是参数展示,未进行字符串转义,实际情况下请转义

$request->bizContent = "{

"primary_industry_name":"IT科技/IT软件与服务",

"primary_industry_code":"10001/20102",

"secondary_industry_code":"10001/20102",

"secondary_industry_name":"IT科技/IT软件与服务"

}"

$response= $c->execute($req);

但是总是返回 缺少签名参数,有没有详细的接口说明?

第一个:支付宝SDK在Laravel5封装包 :https://github.com/Latrell/Alipay

第二个:sdk单文件

key = ''; //交易安全校验码

* $this->alipay->alipay_config = $params;

* $alipay->buildRequest();

*

* 验证异步通知

* $this->alipay->key = ''; //交易安全校验码

* $this->alipay->alipay_config = $data; //支付宝异步通知参数

* $this->alipay->verifyNotify();

*

* @package Alipay

* @author Dyllen

* @since Version 0.2

*/

class Alipay {

/**

* 交易安全校验码

*

* @access public

* @var string

*/

public $key;

/**

* 请求参数配置,支付宝接口文档中所需的参数

*

* @access public

* @var array

*/

public $alipay_config=[];

/**

* HTTPS证书,用于cURL

* 默认和本类文件同级目录的cacert.pem文件

*

* @access public

* @var string

*/

public $credential;

/**

* 支付宝网关地址

*/

const ALIPAY_GATEWAY = 'https://mapi.alipay.com/gateway.do?';

/**

* HTTPS形式消息验证地址

*/

const HTTPS_VERIFY_URL = 'https://mapi.alipay.com/gateway.do?service=notify_verify&';

/**

* HTTP形式消息验证地址

*/

const HTTP_VERIFY_URL = 'http://notify.alipay.com/trade/notify_query.do?';

/**

* 创建支付请求,重定向到支付宝收银台

*

* @access public

* @return void

*/

public function buildRequest() {

$this->alipay_config['sign'] = $this->signData();

return self::ALIPAY_GATEWAY . $this->createQueryString('', true);

}

/**

* 验证支付宝异步通知参数合法性

*

* @access public

* @return boolean

*/

public function verifyNotify() {

$param_tmp = $this->filter(); //过滤待签名数据

$responseTxt = 'true';

if( !empty( $this->alipay_config['notify_id'] ) ) {

$responseTxt = $this->getResponse();

}

if($this->alipay_config['sign_type'] == 'RSA') {

$signString = $this->getSignString();

$ci = & get_instance();

//初始化RSA库

$ci -> load -> library('rsa');

return $ci->rsa->verifySign($signString, base64_decode($this->alipay_config['sign']), $ci->config->item('alipay_public_key'));

}

else {

$sign = $this->signData();

if ( preg_match("/true$/i",$responseTxt) && ($sign == $this->alipay_config['sign']) ) {

return true;

} else {

return false;

}

}

}

/**

* 签名数据

* 签名规则:

* sign和sign_type不参加签名,需要去掉

* 对参数数组依据键名按照字母顺序升序排序

* 排序完成之后键值对用&字符连接,组成URL的查询字符串形式待签名字符串,待签名数据不需用url encoding

* MD5签名:私钥拼接到待签名字符串的后面,然后用md5对字符串运算,得到32位签名结果

*

* @return string 已签名数据

*/

private function signData() {

$param_tmp = $this->getSignString(); //待签名字符串

if( !isset($this->key) ) {

return FALSE;

}

$sign = '';

//签名数据

switch ($this->alipay_config['sign_type']) {

case 'RSA':

$sign = $this->rsaSign($param_tmp);

break;

case 'DES':

break;

default:

$sign = $this->md5Sign($param_tmp);

}

return $sign;

}

/**

* MD5加密字符串

*

* @access private

* @param string $data 待加密字符串

* @return string

*/

private function md5Sign( $data ) {

return md5($data . $this->key);

}

/**

* RSA 加密字符串

*

* @param string $data 待加密字符串

* @return string

*/

private function rsaSign( $data ) {

$ci = & get_instance();

//初始化RSA库

$ci -> load -> library('rsa');

$ci -> rsa -> setKey($ci -> config -> item('pay_private_key'), $ci -> config -> item('pay_public_key'));

return $ci->rsa->encrypt($data);

}

/**

* 获得待签名数据

*

* @access private

* @return string

*/

private function getSignString() {

$param_tmp = $this->filter(); //过滤待签名数据

//排序

ksort($param_tmp);

reset($param_tmp);

//创建查询字符串形式的待签名数据

return $this->createQueryString($param_tmp);

}

/**

* 过滤待签名数据,去掉sing、sing_type及空值

*

* @access private

* @return array

*/

private function filter() {

$para_filter = array();

foreach($this->alipay_config as $key => $value){

if($key =="sign"|| $key =="sign_type"|| empty($value)) continue;

else $para_filter[$key] = $value;

}

return $para_filter;

}

/**

* 用&拼接字符串,形成URL查询字符串

*

* @access private

* @param array $data

* @param boolean $is_encode 是否对值做urlencode

* @return string

*/

private function createQueryString($data=NULL, $is_encode=false ) {

$arr = empty($data) ? $this->alipay_config : $data;

$arg = '';

foreach( $arr as $key => $value ) {

if($is_encode) {

$key = urlencode($key);

$value = urlencode($value);

}

$arg .= $key . '=' . $value . '&';

}

$arg = substr($arg, 0, strlen($arg)-1); //去掉最后一个&

//如果存在转义字符,那么去掉转义

if(get_magic_quotes_gpc()) {$arg = stripslashes($arg);}

return $arg;

}

/**

* 获取远程服务器ATN结果,验证返回URL

*

* 验证结果集:

* invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空

* true 返回正确信息

* false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟

*

* @access private

* @return 服务器ATN结果

*/

private function getResponse() {

//载入支付配置

$ci = & get_instance();

$ci->config->load('alipay');

$config = $ci->config->item('alipay');

$transport = strtolower(trim($config['transport']));

$partner = trim($config['partner']);

$veryfy_url = '';

if($transport == 'https') {

$veryfy_url = self::HTTPS_VERIFY_URL;

}

else {

$veryfy_url = self::HTTP_VERIFY_URL;

}

$veryfy_url = $veryfy_url."partner=". $partner ."&notify_id=". $this->alipay_config['notify_id'];

$responseTxt = $this->getHttpResponseGET($veryfy_url);

return $responseTxt;

}

/**

* 取证书,用于cURL的请求

*

* @access private

* @return string 证书路径

*/

private function getCr() {

if( ! empty($this->credential) ) {

return $this->credential;

}

return getcwd() . DIRECTORY_SEPARATOR . 'applicationlibraries' . DIRECTORY_SEPARATOR .'cacert.pem';

}

/**

* 远程获取数据,POST模式

* 注意:

* 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了

* 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\cacert.pem'

*

* @param $url 指定URL完整路径地址

* @param $cacert_url 指定当前工作目录绝对路径

* @param $para 请求的数据

* @param $input_charset 编码格式。默认值:空值

* return 远程输出的数据

*/

private function getHttpResponsePOST($url, $para, $input_charset = '') {

if (trim($input_charset) != '') {

$url = $url."_input_charset=".$input_charset;

}

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证

curl_setopt($curl, CURLOPT_CAINFO,$this->getCr());//证书地址

curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果

curl_setopt($curl, CURLOPT_POST,true); // post传输数据

curl_setopt($curl, CURLOPT_POSTFIELDS,$para);// post传输数据

$responseText = curl_exec($curl);

//var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容

curl_close($curl);

return $responseText;

}

/**

* 远程获取数据,GET模式

* 注意:

* 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了

* 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\cacert.pem'

*

* @param $url 指定URL完整路径地址

* @param $cacert_url 指定当前工作目录绝对路径

* return 远程输出的数据

*/

private function getHttpResponseGET($url) {

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证

curl_setopt($curl, CURLOPT_CAINFO,$this->getCr());//证书地址

$responseText = curl_exec($curl);

//var_dump( curl_error($curl) );exit;//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容

curl_close($curl);

return $responseText;

}

}

/**

* 支付宝配置文件

*/

$config['alipay'] = array(

'key' => 'XXXX', //交易安全校验码,用于签名的32位密钥

'transport' => 'https', //消息验证地址使用访问方式

'seller_email' => 'XXXX', //卖家支付宝账号,即收款账户

'service' => 'create_direct_pay_by_user', //接口名称

'partner' => '2343546', //合作者省份ID

'_input_charset' => 'utf-8', //参数编码字符集

'sign_type' => 'MD5', //签名方式,不参加签名

'notify_url' => '2324343', //服务器异步通知页面路径

'return_url' => '3435465768', //页面跳转通知页面路径

);

//异步通知例子,CI框架

//载入支付配置

$this->config->load('alipay');

$this->load->library('Alipay');

$this->alipay->key = $this->config->item('alipay')['key'];

$this->alipay->alipay_config = $data; //这个data是支付宝提交过来的参数

if( ! $this->alipay->verifyNotify() ) {

echo 'fail';exit;

}

第三个我写的:这些你够用了 我写的太乱了就不发了 有问题留言

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/** *SDK调用说明 */ public function index() { //调用测试 import('AlipaySDK.Alipay'); $pay = new \Alipay(); /** * $trade_type 交易类型 app wap web */ $data = $pay->alipay('215360251411626', '0.01', '测试', '测试', 'web', 'http://www.test.com/callback'); //wap 结果string(880) "https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_WAP_PAY"}&charset=UTF-8&format=json&method=alipay.trade.wap.pay&notify_url=http://www.test.com/callback&sign=RKPyAKAPv28GKfhWIdsCCOualcg2DMCbhpny6yw/tTvJ3Och+yIfS1au7zbGBnm5sFoX2enfgfZekTqBCyzK0/Irw01zDSAOJM4mPYxs96OUkOglWS5Zuq64JwQBAzesFvzKBGgsH2ecL8EUCclDbBIIrAT/DWr6KenyvQvXOxVQNwn540NoS754oBU0w9vLdrGj0Jljvn8D6cbDgnHiE8qLOgpaXv1ROLwtol0yj2H7cM/G7A9RM5Y8jV1aVNYWND8M4XAK5Wr8zwoa9RocbqDpYfw66NXSvrsuFpHf7MpWtSybH5TnxOP5kwzr7pJRDi0XRAyD9u1geei9thUsqA==&sign_type=RSA2&timestamp=2018-09-04+11:50:49&version=1.0" //app 结果直接返回客户端无需处理 alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_MSECURITY_PAY"}&charset=UTF-8&format=json&method=alipay.trade.app.pay¬ify_url=http://www.test.com/callback&sign_type=RSA2×tamp=2018-09-04+11:54:53&version=1.0&sign=Ab6a0lDxaNcWLL7XcETM85DbBrJI8Sj6czPGKBNK17MZ85FBeStKL+nA/Z4tMORC7H39ooVCDz9ILpbRUfU0eaE7Oe2MOz+Jsj7oUEqwvbvt7eebyPgy2PmPlfAwcZypKla0nUJwHOF5F0cL+mvMGk/K7f2PYMtWL/dIfPOQGC1hBoKFiS+ZF7jIJ98R0AaITAjvQ1drAmJqXpMzUCa1XsTCuQXMXYKu8DNGb/hooJu0xUH/qUU+4fKD0TmBYANQHIrKIBNFl6J2Gw504Mlcfh929ce+YdzF8DXQjacsBSp7f08UJ/FfRvhVXqAfX8lAFETGjc7FXGgU6simNgv1UQ== //web 结果 https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"FAST_INSTANT_TRADE_PAY"}&charset=UTF-8&format=json&method=alipay.trade.page.pay¬ify_url=http://www.test.com/callback&sign=l9+A5ZByhwLjQwzRes9+ymKkFVu7uMND4j6cIWmXIXHjrBnGaHkcr+hVkwocaU3d/hB2hdPnxDruhyYFgchnsIA/XWumosG9uEnKyD/T52+VZ8FxLh5wpwH0ucvKzbMjgIWk9dPVjUAU5Zz7QjqKsJ+AsItFpttd0tEVZD4je2PFp5mizeCWT0id0H+y44IGexN705rNe6TGpfJDG0RSDsbD/ZoCzd8FRzC9cv5uwf00J1E9Yc0bUH/l37WFDBTv/LZnqdfeWpaiu8ro7CJ3R+z/xGQTHToo2zLtEc4Cwop096X8WqwSdGbyI9FCemcFzigRB+6yzD9nS4PsWEG3Ug==&sign_type=RSA2×tamp=2018-09-04+11:56:06&version=1.0 echo $data; exit; } /** * 回调地址 */ public function callback() { import('AlipaySDK.Alipay'); $pay = new \Alipay(); $data = $_POST; $verify_result = $pay->check($data); if ($verify_result) { // 验证成功 $out_trade_no = $data['out_trade_no']; // 支付宝交易号 $trade_no = $data['trade_no']; // 交易状态 $trade_status = $data['trade_status']; if ($trade_status == 'TRADE_FINISHED') { //成功之后的操作 } else if ($trade_status == 'TRADE_SUCCESS') { //成功之后的操作 } echo "success"; // 请不要修改或删除 } else { // 验证失败 echo "fail"; } } 声明:是文档根据Alipay文档二次整合,完全开源。如果觉得还可以请点击收藏
使用支付宝支付服务,您需要先注册支付宝开发者账号并创建应用。然后,您可以使用支付宝提供的开发工具包进行开发。以下是一个简单的 PHP 代码示例,可用于生成支付宝付款二维码: ```php <?php require_once("alipay-sdk-PHP-20180104100456/AopSdk.php"); //引入支付宝SDK $aop = new AopClient(); $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';//支付宝网关 $aop->appId = '您的应用ID';//您的应用ID $aop->rsaPrivateKey = '您的应用私钥';//您的应用私钥 $aop->alipayPublicKey = '支付宝公钥';//支付宝公钥 $aop->apiVersion = '1.0'; $aop->signType = 'RSA2';//签名算法 //构造参数 $request = new AlipayTradePrecreateRequest(); $request->setBizContent("{" . " \"out_trade_no\":\"20150320010101001\"," . " \"total_amount\":\"88.88\"," . " \"subject\":\"Iphone6 16G\"," . " \"store_id\":\"NJ_001\"," . " \"timeout_express\":\"90m\"" . " }"); //请求预授权码 $result = $aop->execute($request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $qrCodeUrl = $result->$responseNode->qr_code; //生成二维码 echo '<img src="http://qr.liantu.com/api.php?text='.urlencode($qrCodeUrl).'">'; ?> ``` 在以上示例中,您需要将“您的应用ID”、“您的应用私钥”和“支付宝公钥”替换为您自己的信息。此外,您还需要将“out_trade_no”、“total_amount”和“subject”替换为您的商品信息。最后,使用$qrcodeUrl生成二维码即可。 当用户扫描二维码并完成付款后,支付宝将发送回调通知到您的服务器。您可以使用相应的 SDK 处理这些通知,以便更新您的系统并将订单标记为已付款。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值