版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】微信支付开发之实现刷卡支付的示例分析
这篇文章主要为大家展示了“微信支付开发之实现刷卡支付的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让在下带领大家一起研究并学习一下“微信支付开发之实现刷卡支付的示例分析”这篇文章吧。一、刷卡支付API接口地址/pay/micropay是否需要证书不需要。输入参数名称变量名必填类型示例值描述商品详细列表,使用Json格式,传输签名前请务必使用CDATA标签将JSON文本串保护起来。goods_detail[]:└goods_idString必填32商品的编号└wxpay_goods_idString可选32微信支付定义的统一商品编号└goods_nameString必填256商品名称└goods_numInt必填商品数量└priceInt必填商品单价,单位为分└goods_categoryString可选32商品类目ID└bodyString可选1000商品描述信息实际提交的返回举例如下:<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>订单额外描述</attach>
<auth_code>120269300684844649</auth_code>
<body>刷卡支付测试</body>
<device_info>1000</device_info>
<goods_tag></goods_tag>
<mch_id>10000100</mch_id>
<nonce_str>8aaee146b1dee7cec9100add9b96cbe2</nonce_str>
<out_trade_no>1415757673</out_trade_no>
<spbill_create_ip>2</spbill_create_ip>
<time_expire></time_expire>
<total_fee>1</total_fee>
<sign>C29DB7DB1FD4136B84AE35604756362C</sign>
</xml>注:参数值用XML转义即可,CDATA标签用于说明数据不被XML解析器解析。返回结果名称变量名必填类型示例值描述当return_code为SUCCESS的时候,还会包括以下字段:名称变量名必填类型示例值描述当return_code和result_code都为SUCCESS的时,还会包括以下字段:名称变量名必填类型示例值描述举例如下:<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<device_info><![CDATA[1000]]></device_info>
<nonce_str><![CDATA[GOp3TRyMXzbMlkun]]></nonce_str>
<sign><![CDATA[D6C76CB785F07992CDE05494BB7DF7FD]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<openid><![CDATA[oUpF8uN95-Ptaags6E_roPHg7AG0]]></openid>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<trade_type><![CDATA[MICROPAY]]></trade_type>
<bank_type><![CDATA[CCB_DEBIT]]></bank_type>
<total_fee>1</total_fee>
<coupon_fee>0</coupon_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<transaction_id><![CDATA[1008450740201411110005820873]]></transaction_id>
<out_trade_no><![CDATA[1415757673]]></out_trade_no>
<attach><![CDATA[订单额外描述]]></attach>
<time_end><![CDATA[20141111170043]]></time_end>
</xml>二、刷卡支付类实现在微信支付原来的微信支付类文件中,仿照统一支付类的方式,添加刷卡支付类如下:/**
*
刷卡支付接口类
*/
class
MicroPay_pub
extends
Wxpay_client_pub
{
function
__construct()
{
//设置接口链接
$this->url
=
"/pay/micropay";
//设置curl超时时间
$this->curl_timeout
=
WxPayConf_pub::CURL_TIMEOUT;
}
/**
*
生成接口参数xml
*/
function
createXml()
{
try
{
//检测必填参数
if($this->parameters["out_trade_no"]
==
null){
throw
new
SDKRuntimeException("缺少统一支付接口必填参数out_trade_no!"."<br>");
}elseif($this->parameters["body"]
==
null){
throw
new
SDKRuntimeException("缺少统一支付接口必填参数body!"."<br>");
}elseif
($this->parameters["total_fee"]
==
null
)
{
throw
new
SDKRuntimeException("缺少统一支付接口必填参数total_fee!"."<br>");
}elseif
($this->parameters["auth_code"]
==
null)
{
throw
new
SDKRuntimeException("缺少统一支付接口必填参数auth_code!"."<br>");
}
$this->parameters["appid"]
=
WxPayConf_pub::APPID;//公众账号ID
$this->parameters["mch_id"]
=
WxPayConf_pub::MCHID;//商户号
$this->parameters["spbill_create_ip"]
=
$_SERVER['REMOTE_ADDR'];//终端ip
$this->parameters["nonce_str"]
=
$this->createNoncestr();//随机字符串
$this->parameters["sign"]
=
$this->getSign($this->parameters);//签名
//
var_dump($this->parameters);
return
$this->arrayToXml($this->parameters);
}catch
(SDKRuntimeException
$e)
{
die($e->errorMessage());
}
}
}原有的基础类和请求类也列出如下:/**
*
所有接口的基类
*/
class
Common_util_pub
{
function
__construct()
{
}
function
trimString($value)
{
$ret
=
null;
if
(null
!=
$value)
{
$ret
=
$value;
if
(strlen($ret)
==
0)
{
$ret
=
null;
}
}
return
$ret;
}
/**
*
作用:产生随机字符串,不长于32位
*/
public
function
createNoncestr(
$length
=
32
)
{
$chars
=
"abcdefghijklmnopqrstuvwxyz0123456789";
$str
="";
for
(
$i
=
0;
$i
<
$length;
$i++
)
{
$str.=
substr($chars,
mt_rand(0,
strlen($chars)-1),
1);
}
return
$str;
}
/**
*
作用:格式化参数,签名过程需要使用
*/
function
formatBizQueryParaMap($paraMap,
$urlencode)
{
$buff
=
"";
ksort($paraMap);
foreach
($paraMap
as
$k
=>
$v)
{
if($urlencode)
{
$v
=
urlencode($v);
}
//$buff
.=
strtolower($k)
.
"="
.
$v
.
"&";
$buff
.=
$k
.
"="
.
$v
.
"&";
}
$reqPar;
if
(strlen($buff)
>
0)
{
$reqPar
=
substr($buff,
0,
strlen($buff)-1);
}
return
$reqPar;
}
/**
*
作用:生成签名
*/
public
function
getSign($Obj)
{
foreach
($Obj
as
$k
=>
$v)
{
$Parameters[$k]
=
$v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String
=
$this->formatBizQueryParaMap($Parameters,
false);
//echo
'【string1】'.$String.'</br>';
//签名步骤二:在string后加入KEY
$String
=
$String."&key=".WxPayConf_pub::KEY;
//echo
"【string2】".$String."</br>";
//签名步骤三:MD5加密
$String
=
md5($String);
//echo
"【string3】
".$String."</br>";
//签名步骤四:所有字符转为大写
$result_
=
strtoupper($String);
//echo
"【result】
".$result_."</br>";
return
$result_;
}
/**
*
作用:array转xml
*/
function
arrayToXml($arr)
{
$xml
=
"<xml>";
foreach
($arr
as
$key=>$val)
{
if
(is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">";
}
else
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
$xml.="</xml>";
return
$xml;
}
/**
*
作用:将xml转为array
*/
public
function
xmlToArray($xml)
{
//将XML转为array
$array_data
=
json_decode(json_encode(simplexml_load_string($xml,
'SimpleXMLElement',
LIBXML_NOCDATA)),
true);
return
$array_data;
}
/**
*
作用:以post方式提交xml到对应的接口url
*/
public
function
postXmlCurl($xml,$url,$second=30)
{
//初始化curl
$ch
=
curl_init();
//设置超时
curl_setopt($ch,
CURLOP_TIMEOUT,
$second);
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY,
'');
//curl_setopt($ch,CURLOPT_PROXYPORT,
8080);
curl_setopt($ch,CURLOPT_URL,
$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置header
curl_setopt($ch,
CURLOPT_HEADER,
FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch,
CURLOPT_RETURNTRANSFER,
TRUE);
//post提交方式
curl_setopt($ch,
CURLOPT_POST,
TRUE);
curl_setopt($ch,
CURLOPT_POSTFIELDS,
$xml);
//运行curl
$data
=
curl_exec($ch);
curl_close($ch);
//返回结果
if($data)
{
curl_close($ch);
return
$data;
}
else
{
$error
=
curl_errno($ch);
echo
"curl出错,错误码:$error"."<br>";
echo
"<a
href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
curl_close($ch);
return
false;
}
}
/**
*
作用:使用证书,以post方式提交xml到对应的接口url
*/
function
postXmlSSLCurl($xml,$url,$second=30)
{
$ch
=
curl_init();
//超时时间
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY,
'');
//curl_setopt($ch,CURLOPT_PROXYPORT,
8080);
curl_setopt($ch,CURLOPT_URL,
$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置header
curl_setopt($ch,CURLOPT_HEADER,FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//设置证书
//使用证书:cert
与
key
分别属于两个.pem文件
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT,
dirname(__FILE__).WxPayConf_pub::SSLCERT_PATH);
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY,
dirname(__FILE__).WxPayConf_pub::SSLKEY_PATH);
//post提交方式
curl_setopt($ch,CURLOPT_POST,
true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
$data
=
curl_exec($ch);
//返回结果
if($data){
curl_close($ch);
return
$data;
}
else
{
$error
=
curl_errno($ch);
echo
"curl出错,错误码:$error"."<br>";
echo
"<a
href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
curl_close($ch);
return
false;
}
}
/**
*
作用:打印数组
*/
function
printErr($wording='',$err='')
{
print_r('<pre>');
echo
$wording."</br>";
var_dump($err);
print_r('</pre>');
}
}
/**
*
请求型接口的基类
*/
class
Wxpay_client_pub
extends
Common_util_pub
{
var
$parameters;//请求参数,类型为关联数组
public
$response;//微信返回的响应
public
$result;//返回参数,类型为关联数组
var
$url;//接口链接
var
$curl_timeout;//curl超时时间
/**
*
作用:设置请求参数
*/
function
setParameter($parameter,
$parameterValue)
{
$this->parameters[$this->trimString($parameter)]
=
$this->trimString($parameterValue);
}
/**
*
作用:设置标配的请求参数,生成签名,生成接口参数xml
*/
function
createXml()
{
$this->parameters["appid"]
=
WxPayConf_pub::APPID;//公众账号ID
$this->parameters["mch_id"]
=
WxPayConf_pub::MCHID;//商户号
$this->parameters["nonce_str"]
=
$this->createNoncestr();//随机字符串
$this->parameters["sign"]
=
$this->getSign($this->parameters);//签名
return
$this->arrayToXml($this->parameters);
}
/**
*
作用:post请求xml
*/
function
postXml()
{
$xml
=
$this->createXml();
$this->response
=
$this->postXmlCurl($xml,$this->url,$this->curl_timeout);
return
$this->response;
}
/**
*
作用:使用证书post请求xml
*/
function
postXmlSSL()
{
$xml
=
$this->createXml();
$this->response
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国研究生入学统一考试法律硕士联考历年真题及答案
- HJ 447-2008 清洁生产标准 铅蓄电池工业
- 火电厂可靠性管理是指在预定时间内和规定的技术
- 湖北百奥斯生物奖罚制度(试用版) 为了充分调动大家的积极性提高
- 2024电力智能树障清理机器人技术导则
- 三年级下册英语期末试题质量检测 1718 北师大版
- 干果果仁类检验标准
- 尔雅-书法鉴赏期末考试答案100分
- 《感恩教育》演讲稿
- 湖南炎德英才名校联考联合体2025届新高三入学摸底考试化学试题附参考答案(解析)
- 2024-2030年中国设计行业发展趋势与经验借鉴研究报告
- NB-T32036-2017光伏发电工程达标投产验收规程
- 中国血脂管理指南(基层版2024年)解读
- 碳中和技术概论全套教学课件
- 2024年互联网营销师(直播销售员)三级理论考试题库(含答案)
- 部编本语文四年级上册第三单元教材解读-PPT
- 安全生产管理人员安全培训通用教材PPT课件
- 《焦耳定律》教学设计
- 软件项目报价表-软件报价明细表参考模板
- 部编版语文四年级上册第七单元分析教材分析
- 中国高铁运营线路图
评论
0/150
提交评论