【移动应用开发技术】微信支付开发之实现刷卡支付的示例分析_第1页
【移动应用开发技术】微信支付开发之实现刷卡支付的示例分析_第2页
【移动应用开发技术】微信支付开发之实现刷卡支付的示例分析_第3页
【移动应用开发技术】微信支付开发之实现刷卡支付的示例分析_第4页
【移动应用开发技术】微信支付开发之实现刷卡支付的示例分析_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】微信支付开发之实现刷卡支付的示例分析

这篇文章主要为大家展示了“微信支付开发之实现刷卡支付的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让在下带领大家一起研究并学习一下“微信支付开发之实现刷卡支付的示例分析”这篇文章吧。一、刷卡支付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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论