微信支付demo中配置文件的通用ios rsa加密 demo串如何填写

酷勤网 C 程序员的那点事!
当前位置: >
浏览次数:次
微信支付是由微信及财付通联合推出的移动支付创新产品。如今,随着微信支付的全面开放,相关需求也越来越多,很多开发人员进行微信支付开发及商家申请微信支付时,面临着诸多疑惑。本文将结合微信支付接口开发的实践,从支付申请到各主要接口的使用方法等方面介绍微信支付的关键点技术。
目前,微信支付只能由通过微认证的服务号进行申请,订阅号及未认证的服务号均无法申请。登录微信公众平台后台,在左侧的栏目中可找到&微信支付&,点击进入申请界面,可以看到第一项中的&商户基本资料&,点击右侧的&填写&按钮后就进入了微信支付设置界面。
微信支付的目录及URL没有固定的设置方法,具体还需要根据自己的需求来定,表1是方倍工作室的方案。
表1 微信支付目录及URL设置
需要注意的是,如果使用上述方法,要将域名换成自己的域名,其他的结构及层次可不变。这里所有的URL没有填写实际的文件名,目的是为了兼容不同的开发语言或框架。比如目录下的默认文件既可能是index.php,也可能是index.aspx。微信支付申请完成后,便进入了微信支付测试阶段,需要填写支付测试目录,测试目录可以填写为:/wxpay/test/。
JS API支付
JS API支付的实现比较简单,官方也提供了Demo,在此基础上修改部分参数即可。修改后的
一个示例如下:
include_once(&WxPayHelper.php&);
$commonUtil=newCommonUtil();
$wxPayHelper=newWxPayHelper();
$wxPayHelper-&setParameter(&bank_type&,&WX&);
$wxPayHelper-&setParameter(&body&,&微信支付开发教程&);
$wxPayHelper-&setParameter(&partner&,PARTNERID);
$wxPayHelper-&setParameter(&out_trade_no&,$commonUtil-&create_noncestr());
$wxPayHelper-&setParameter(&total_fee&,&1&);
$wxPayHelper-&setParameter(&fee_type&,&1&);
$wxPayHelper-&setParameter(&notify_url&,
&/wxpay/notify/&);
$wxPayHelper-&setParameter(&spbill_create_ip&,$_SERVER['REMOTE_ADDR']);
$wxPayHelper-&setParameter(&input_charset&,&GBK&);
$biz_package=$wxPayHelper-&create_biz_package();
上述代码中,主要修改了两个参数:notify_url为接收交易通知的路径,这个一定要改为自己服务器上的一个路径;spbill_create_ip为用户客户端的IP,不改关系也不大,不过改一下更规范些。
JS API支付是网页内的支付,通过调用微信支付控件来实现支付。如果要用作真实产品场景的支付,只需要修改一下产品名称及费用即可,对于涉及到快递费用的交易,需要注意订单的总金额为商品费用和物流费用的和。
如果微信支付时提示Access Denied,通常有以下原因:参数填写不正确、支付目录结构不正确、没有加入白名单权限。需要对照检查一下,才能找到具体原因并进行纠正。
Native支付
Native(原生)支付就是常说的扫描二维码支付。这种支付首先需要商户定义符合Native支付规范的URL,也就是Native支付URL,同时在微信后台POST商户后台时需要提供package内容。
Native支付的开发分为三步。
生成Native支付的URL
Native支付URL是一系列具有&weixin://wxpay/bizpayurl?&前缀的URL,同时后面紧跟着一系列辨别商户的键值对。
原生URL由wxPayHelper类中的create_native_url()方法实现,实现代码如下:
&p&&?php&/p&&p&include_once(&WxPayHelper.php&);$wxPayHelper=newWxPayHelper();&/p&&p&$productid=&&;echo$wxPayHelper-&create_native_url($productid);?&&/p&
其中productid是商品唯一ID,开发人员需要定义并维护自己的商品ID,这个ID与一张订单等价,微信后台凭借该ID通过POST商户后台获取交易信息。上述代码生成的URL如下所示:
weixin://wxpay/bizpayurl?appid=wxb489e8caeabcdefg&noncestr=BBvdr5atZ9D7s08X&produc
tid=&sign=e15db530e2f2f67ccb5&timestamp=
生成URL的二维码有了上述支付链接后,还要把它转成二维码,PHP QR Code是一个开源的二维码生成类库,可使用它来生成上述Native URL,代码如下:
include'phpqrcode.php';$productid=&&;
$filename=$productid.&.png&;
$nativeurl=&weixin://wxpay/bizpayurl?ap
pid=wxb489e8caeabcdefg&noncestr=BBvdr5atZ9D7s08X&productid=&sign=e15db530e2f2f67ccb5&timestamp=&;QRcode::png($nativeurl,$filename,&L&,&5&,2);
PHP QR Code的使用很简单,配置一下URL和文件名就可以了。执行上述代码,就会在当前目录下生成一个.png的二维码图片文件。
Navive支付回调URL
在前面说过,Native支付的回调URL设置为/wxpay/native/,当用户扫描上述二维码时,会调用该回调URL。URL需要调用订单信息Package返回给用户,而该Package是由WxPayHelper类的create_native_package()实现,调用代码如下:
include_once(&WxPayHelper.php&);$commonUtil=newCommonUtil();
$wxPayHelper=newWxPayHelper();
$wxPayHelper-&setParameter(&bank_type&,&WX&);
$wxPayHelper-&setParameter(&body&,&微信支付开发教程&);
$wxPayHelper-&setParameter(&partner&,PARTNERID);
$wxPayHelper-&setParameter(&out_trade_no&,$commonUtil-&create_noncestr());
$wxPayHelper-&setParameter(&total_fee&,&1&);
$wxPayHelper-&setParameter(&fee_type&,&1&);
$wxPayHelper-&setParameter(&notify_url&,&/wxpay/notify/&);
$wxPayHelper-&setParameter(&spbill_create_ip&,$_SERVER['REMOTE_ADDR']);
$wxPayHelper-&setParameter(&input_charset&,&GBK&);
$native_package=$wxPayHelper-&create_native_package();
echo$native_
上述代码中,参数的配置和JS API支付一样,只是最后调用的支付方式不一样。
与此同时,微信公众平台将会向回调URL推送XML格式的数据。这些数据中包含签名字段,可以用来验证是否是真正的支付二维码,但这个验证的必要性不是很大。而回调URL也会返回一个XML格式的数据给微用户,用户才能看到他所交易的商品信息的内容,这个XML的格式如下:
&AppId&&![CDATA[wxb489e8caeabcdefg]]&&/AppId&
&Package&&![CDATA[bank_type=WX&body=%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B&fee_type=1&input_charset=GBK&notify_
url=http%3A%2F%2Fwww.doucube.
com%2Fwxpay%2Fnotify%2F&out_trade_no=RaurRyM00lk9JZ8H&partner=&spbill_create_ip=58.60.3.185&total_fee=1&sign=C580FDA6E31AA89549DEB494]]&&/Package&
&TimeStamp&&/TimeStamp&&NonceStr&&![CDATA[7omKw6AMZOq8022u]]&&/NonceStr&
&RetCode&0&/RetCode&&RetErrMsg&&![CDATA[ok]]&&/RetErrMsg&
&AppSignature&&![CDATA[e01aa37f19aedcd472882]]&&/AppSignature&
&SignMethod&&![CDATA[sha1]]&&/SignMethod&
如果商品已过期或有其他错误,则可以在上述返回XML数据中的RetCode和RetErrMsg中体现出来。例如:RetCode为其他非0值,RetErrMsg为&该商品已下架&。
在上述JS API或Native支付完成后,将向/wxpay/notify/发送交易通知,并且带上URL参数,一个完整的带参数URL如下:
&ahref=&/wxpay/notify/index.php?discount=0&fee_type=1&input_charset=GBK&notify_id=xhLwKoKHzIQeMSQrEMJ7WXJNxyPKaUmxsn--xLtq4FT7LkAeFe-IHd_ARlj7kdyYUavoFfz5v2We9P6GEIv7zGgoVlT4gP2I&out_trade_no=omeDreZkCTQOuZSB&partner=&product_fee=1&sign=D18E640BDECB18CDBA88C2&sign_type=MD5&time_end=55&total_fee=1&trade_mode=1&trade_state=0&transaction_id=12012&&
&ahref=&/wxpay/notify/index.php?discount=0&fee_type=1&input_charset=GBK&notify_id=xhLwKoKHzIQeMSQrEMJ7WXJNxyPKaUmxsn--xLtq4FT7LkAeFe-IHd_ARlj7kdyYUavoFfz5v2We9P6GEIv7zGgoVlT4gP2I&out_trade_no=omeDreZkCTQOuZSB&partner=&product_fee=1&sign=D18E640BDECB18CDBA88C2&sign_type=MD5&time_end=55&total_fee=1&trade_mode=1&trade_state=0&transaction_id=12012&/a&&/wxpay/notify/index.php?discount=0&fee_type=1&input_charset=GBK&notify_id=xhLwKoKHzIQeMSQrEMJ7WXJNxyPKaUmxsn--xLtq4FT7LkAeFe-IHd_ARlj7kdyYUavoFfz5v2We9P6GEIv7zGgoVlT4gP2I&out_trade_no=omeDreZkCTQOuZSB&partner=&product_fee=1&sign=D18E640BDECB18CDBA88C2&sign_type=MD5&time_end=55&total_fee=1&trade_mode=1&trade_state=0&transaction_id=12012&/a&/a&&
&transport_fee=0
同时,微信还发送POST数据,XML格式如下:
&OpenId&&![CDATA[oWWVStzuQl6Gz-pj39_Gk1lvnfoY]]&&/OpenId&
&AppId&&![CDATA[wxb489e8caeabcdefg]]&&/AppId&
&IsSubscribe&1&/IsSubscribe&
&TimeStamp&&/TimeStamp&
&NonceStr&&![CDATA[WW8xQ6th6ybgy0lF]]&&/NonceStr&
&AppSignature&&![CDATA[30ecacd2f6c1caac95727]]&&/AppSignature&
&SignMethod&&![CDATA[sha1]]&&/SignMethod&
注意,URL和XML中包含了此次交易的很多重要信息,其中有三项参数,分别是商户订单号out_trade_no,交易号transaction_id及XML数据中的OpenID,这几个参数将在后续很多接口中使用到。
订单查询API的URL为:
h t t p s : / / a p i . w e i x i n . q q . c o m / p a y /orderquery?access_token=xxxxxx
URL中的参数只包含微信公众平台凭证access_token,而订单查询的真正数据是放在PostData中的,格式如下:
&appid&:&wwwwb4f85f3a797777&,
&package&:&out_trade_no=11122&partner=&sign=4e8d0df3da0c3d0df38f&,
&timestamp&:&&,
&app_signature&:&53cca9d47b883bd4a5c85acb48565c&,
&sign_method&:&sha1&
订单查询这一接口,开发文档中并没有给出Demo,所以需要自己来实现。其中关键点是生成参数package中的sign和app_signature。其中,sign是对参数字典序排序并使用&&&联合起来,最后加上&key=partnerkey(唯一分配),进行md5运算,再转成全大写,最终得到sign。而app_signature则是根据支付签名(paySign)生成方法中所讲的签名方式生成,参加签名字段为:appid、appkey、package、timestamp。相关代码实现如下所示:
$sign=strtoupper(md5(&out_trade_no=JfuKdiBig4zZnE4n&partner=&key=asdfas
dfasdfasdfasdfasdfasdfasdf&));
$package=&out_trade_no=JfuKdiBig4zZnE4n&partner=&sign=&.$
$obj['appid']=&wx0000&;
$obj['appkey']=&8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvd
JENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k&;
$obj['package']=$
$obj['timestamp']=time();
$WxPayHelper=newWxPayHelper();//get_biz_sign函数为protected类型,可改为public
$app_signature=$WxPayHelper-&get_biz_sign($obj);
发货通知API的URL为:
h t t p s : / / a p i . w e i x i n . q q . c o m / p a y /delivernotify?access_token=xxxxxx
URL中的参数只包含微信公众平台凭证access_token,而发货通知的真正数据放在PostData中,格式如下:
&appid&:&wwwwb4f85f3a797777&,&openid&:&oX99MDgNcgwnz3zFN3DNmo8uwa-w&,
&transid&:&333&,
&out_trade_no&:&555666uuu&,
&deliver_timestamp&:&&,
&deliver_status&:&1&,
&deliver_msg&:&ok&,
&app_signature&:&53cca9d47b883bd4a5c8
&spanstyle=&font-family:Helvetica,​Tahoma,​Arial,​sans-font-size:14&&5acb48565c&,&/span&&p&&&sign_method&:&sha1&
发货通知也没有Demo,需要自己开发实现,其中的关键点也是生成app_signature,它根据支付签名(paySign)生成方法中所讲的签名方式生成,参加签名字段为:appid、appkey、openid、transid、out_trade_no、deliver_timestamp、deliver_status、deliver_msg。实现代码如下所示:
$deliver_timestamp=time();
$obj['appid']=APPID;
$obj['appkey']=APPKEY;
$obj['openid']=&oWWVStzuQl6Gz-pj39_Gk1lvnfoY&;//交易通
知XML中获得$obj['transid']=&5725&;//jsapi中生成,交易通
知URL中获得$obj['out_trade_no']=&omeDreZkCTQOuZSB&;//jsapi中生成,交易通
知URL中获得$obj['deliver_timestamp']=$deliver_
$obj['deliver_status']=&1&;
$obj['deliver_msg']=&ok&;
$WxPayHelper=newWxPayHelper();
$app_signature=$WxPayHelper-&get_biz_
sign($obj);
告警通知的URL为申请微信支付时设置的/wxpay/alarm/,微信后台将向
该URL推送包含PostData的XML数据,数据中包含错误类型、错误描述、错误详情等信息。告警数据在接收后需要写入到系统告警模块中,并要求商户尽快做出处理,以免影响线上经营。
维权通知的URL为申请微信支付时设置的/wxpay/rights/,用户在新增投诉单及确认处理完毕投诉后,微信后台都会向该URL推送包含PostData的XML数据, 数据中包含维权内容信息。维权通知是被动接收到的通知,接收到后,最好能使用模版消息提醒自己,以免错过处理时限。
标记投诉处理
标记客户投诉处理状态API的URL为:https://api./payfeedback/update?access_token=xxxxx&openid=XXXX&feedbackid=xxxx
URL中的参数包含微信公众平台凭证access_token,客户投诉对应的单号feedbackid,以及OpenID。填好参数后访问该URL即可返回&标记成功&的通知。
收货地址共享
收货地址共享的开发是微信支付开发中最复杂的部分,主要原因有:官方没有Demo;开发文档含糊不清;签名算法与之前的不一致,需要自己新实现;JS API回调后不能给出错误原因提示,调试没有方向感,需要开发者对高级接口中的OAuth2.0过程非常精通。收货地址共享的完整实现步骤如下。
设置授权回调域名
OAuth2.0授权页面域名的配置在公众平台网站&开发者中心&接口权限表&高级接口&OAuth2.0网页授权中设置,将域名设置成微信支付授权目录中的域名,如。
构造请求授权回调URL
请求OAuth2.0授权的URL如下:
请求授权参数说明如表2所示。
表2 请求授权参数
这里,构造请求接口如下:
其中,/wxpay/getAddress.php是获取共享收获地址的页面。作用域使用snsapi_base,用户访问上述请求接口之后,将会跳转到页面/wxpay/getAddress.php?code=02feabc395c1b2e0451547&state=1。
获取共享收货地址
在getAddress.php页面,首先需要获取授权Access Token,这个Access Token是OAuth2.0授权时获得的,不是自定义菜单实现时的那个Access Toekn。实现代码如下:
$appid=APPID;
$appsecret=APPSERCERT;
$code=$_GET[&code&];
$access_token_url=&https://api.weixin.
</sns/oauth2/access_token?appid=$ap
pid&secret=$appsecret&code=$code&grant_
type=authorization_code&;
$access_token_json=file_get_
contents($access_token_url);
$access_token_array=json_
decode($access_token_json,true);
$access_token=$access_token_
array['access_token'];
然后需要计算出地址签名,参与addrSign签名的字段包括:appid、url(当前网页URL,包含code和state参数)、timestamp、noncestr、accessToken(用户OAuth2.0授权凭证)。这里scope、signType不参与签名。这是共享收获地址中最关键的一步,它对所有待签名参数按照字段名ASCII码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2&&)拼接成字符串string1。然后对string1作签名算法,字段名和字段值都采用原始值,并进行URL转义。具体签名算法为addrSign = SHA1(string1)。其代码如下:
$commonUtil=newCommonUtil();
$noncestr=$commonUtil-&create_noncestr();
$timestamp=time();
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$wxPayHelper=newWxPayHelper();
$obj['appId']=$
$obj['url']=$
$obj['timestamp']=$
$obj['noncestr']=$
$obj['accessToken']=$access_//参数小写
foreach($objas$k=&$v){$obj2[strtolower($k)]=$v;}//字典序排序
ksort($obj2);//URL键值对拼成字符串
$bizString=$commonUtil-&formatBizQueryParaMap($obj2,false);//sha1签名
$signature=sha1($bizString);
所有字段的值都获取成功以后,就赋值成收货地址接口的JS API中的变量值。
其他接口还有退款接口、退款查询接口、对账单下载等,他们都有Demo,配置好后即可使用。其中唯一要注意的就是退款接口的开发中pem证书的生成方法。在退款接口的开发中,需要把pfx证书转换pem证书,转换后将pem文件作为私钥。这需要用到OpenSSL这一工具,一般Linux已自带该功能。在Linux下的转换命令如下:
[root@FANGBEIwxpay]#opensslpkcs12-in.pfx-out.pem
EnterImportPassword:MACverifiedOK
EnterPEMpassphrase:
Verifying-EnterPEMpassphrase:
[root@FANGBEIwxpay]#lltotal8-rw-r--r--1rootroot4011Aug20000.pem-rw-r--r--1rootroot2717Aug20000.pfx
[root@FANGBEIwxpay]#
转换过程中需要输入商户ID来解密旧证书,然后设置新密码来加密新证书,新密码将在退款程序中配置使用。
微信支付的开发文档中对部分关键技术阐述不详,不利于开发者快速理解上手。本文从申请微信支付时目录及URL设置到各种接口开发中的核心部分都做了讲解,希望能为微信支付的开发人员提供帮助,加快开发速度。
& 相关主题:您所在的位置: &
微信企业号开发之如何建立连接
微信企业号开发之如何建立连接
通过主动调用模式、回调模式和JSAPI模式三种连接方式的结合,你可以在企业号中建立功能强大的移动轻应用,并依托微信数亿活跃用户,帮助企业方便、快捷地实现应用的部署,并确保应用的活跃度。
连接将使你的企业号更具价值,你可以使用以下三种方式,连接你的企业号及企业应用:
1、企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源、或给成员发送消息等,以下称主动调用模式。
2、企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式。
3、用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式。
通过这三种连接方式的结合,你可以在企业号中建立功能强大的移动轻应用,并依托微信数亿活跃用户,帮助企业方便、快捷地实现应用的部署,并确保应用的活跃度。
主动调用是最基本的连接模式,当你的应用调用企业号时,需使用https协议、Json数据格式、UTF8编码,访问域名为,数据包不需要加密。
在每次主动调用企业号接口时需要带上参数。AccessToken参数由和换取。
是企业号的标识,每个企业号拥有一个唯一的CorpID;Secret是管理组凭证密钥。
系统管理员可通过管理端的权限管理功能创建管理组,分配管理组对应用、通讯录、接口的访问权限。完成后,管理组即可获得唯一的secret。系统管理员可通过权限管理查看所有管理组的secret,其他管理员可通过设置中的开发者凭据查看。
当企业应用调用企业号接口时,企业号后台为根据此次访问的AccessToken,校验访问的合法性以及所对应的管理组的管理权限以返回相应的结果。
注:你应该审慎配置管理组的权限,够用即好,权限过大会增加误操作可能性及信息安全隐患。
AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken。
AccessToken需要用和来换取,不同的Secret会返回不同的AccessToken。正 常情况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果,并自动续期。由于获取access_token的api调用次数非常 有限,建议企业全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。
Https请求方式: GET
管理组的凭证密钥
每个secret代表了对应用、通讯录、接口的不同权限;不同的管理组拥有不同的secret。
a)正确的Json返回结果:
{&&&&&access_token&:&&accesstoken000001&,&}&
access_token
获取到的凭证
b)错误的Json返回示例:
{&&&&&errcode&:&43003,&&&&&errmsg&:&&require&https&&}&
当你获取到时,你的应用就可以成功调用企业号后台所提供的各种接口以管理或访问企业号后台的资源或给企业号成员发消息。
为了防止企业应用的程序错误而引发企业号服务器负载异常,默认情况下,每个企业号调用接口都有一定的频率限制,当超过此限制时,调用对应接口会收到相应错误码。
以下是当前默认的频率限制,企业号后台可能会根据运营情况调整此阈值:
每企业调用单个cgi/api不可超过1000次/分,30000次/小时
每ip调用单个cgi/api不可超过2000次/分,60000次/小时
每ip获取AccessToken不可超过300次/小时
发消息频率
每企业不可超过200次/分钟;不可超过帐号上限数*30人次/天
创建帐号频率
每企业创建帐号数不可超过帐号上限数*3/月
在回调模式下,企业不仅可以主动调用企业号接口,还可以接收用户的消息或事件。接收的信息使用XML数据格式、UTF8编码,并以AES方式加密。
企业号的每个应用都有自己的回调模式开关。在管理端开启并设置好相关参数后,此应用的回调模式才生效。
针对加解密的处理,微信提供了各种语言的库,企业可以在附录中下载。
当你开启应用的回调模式时,企业号会要求你填写应用的URL、Token、EncodingAESKey三个参数。
URL是企业应用接收企业号推送请求的访问协议和地址,支持http或https协议。
Token可由企业任意填写,用于生成签名。
EncodingAESKey用于消息体的加密,是AES密钥的Base64编码。
验证URL、Token以及加密的详细处理请参考后续'接收消息时的加解密处理'的部分。
验证URL有效性
当你提交以上信息时,企业号将发送GET请求到填写的URL上,GET请求携带四个参数,企业在获取时需要做urldecode处理,否则会验证不成功。
msg_signature
微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体
加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文
首次校验时必带
企业通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业号,那么企业应用对echostr参数解密并原样返回echostr明文(不能加引号),则接入验证生效,回调模式才能开启。
后续回调企业时都会在请求URL中带上以上参数(echostr除外),校验方式与首次验证URL一致。
企业号在回调企业URL时,会对消息体本身做AES加密,以XML格式POST到企业应用的URL上;企业在被动回复时,也需要对数据加密,以XML格式返回给微信。企业的回复支持文本、图片、语音、视频、图文等格式。
微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。如果在调试中,发现员工无法收到响应的消息,可以检查是否消息处理超时。
关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime排重。
假如企业无法保证在五秒内处理并回复,可以直接回复空串,企业号不会对此作任何处理,并且不会发起重试。这种情况下,可以使用发消息接口进行异步回复。
假设企业回调URL为。
请求说明:
回调数据格式:
&&&&&&![CDATA[toUser]]&&&&&![CDATA[toAgentID]]&&&&&![CDATA[msg_encrypt]]&&
1.msg_encrypt为经过加密的密文
2.AgentID为接收的应用id,可在应用的设置页面获取
3.ToUserName为企业号的CorpID
企业需要对msg_signature进行校验,并解密msg_encrypt,得出msg的原文。
回复给微信的数据格式:
&&&&&![CDATA[msg_encrypt]]&&&&&&![CDATA[msg_signature]]&&&&&timestamp&&&&&![CDATA[nonce]]&&&
企业可以直接使用微信提供的库进行加解密的处理,目前提供的有c++/python/php/java/c#等语言版本。代码提供了解密、加密、验 证URL三个接口,企业可根据自身需要下载(参见附录)。以下为库函数的使用说明(以c++为例),更详细的加解密方案请参考附录。
1)解密函数
int&DecryptMsg(const&string&&sMsgSignature,&const&string&&sTimeStamp,&const&string&&sNonce,&const&string&&sPostData,&string&&sMsg);&
sMsgSignature
从回调URL中获取的msg_signature参数
sTimeStamp
从回调URL中获取的timestamp参数
从回调URL中获取的nonce参数
从回调URL中获取的整个post数据
用于返回解密后的msg,以xml组织
请参阅附录加密部分。
2)加密函数
int&EncryptMsg(const&string&&sReplyMsg,&const&string&&sTimeStamp,&const&string&&sNonce,&string&&sEncryptMsg);&
返回的消息体原文
sTimeStamp
时间戳,调用方生成
随机数,调用方生成
sEncryptMsg
用于返回的密文,以xml组织
请参阅附录加密部分。
3)验证URL函数
int&VerifyURL(const&string&&sMsgSignature,&const&string&&sTimeStamp,&const&string&&sNonce,&const&string&&sEchoStr,&string&&sReplyEchoStr);&
sMsgSignature
从回调URL中获取的msg_signature参数
sTimeStamp
从回调URL中获取的timestamp参数
从回调URL中获取的nonce参数
从回调URL中获取的echostr参数。注意,此参数必须是urldecode后的值
sReplyEchoStr
解密后的echostr,用于回包。注意,必须原样返回,不要做加引号或其它处理
请参阅附录加密部分。
Weixin JS接口是微信为你的H5应用提供开放原生能力的接口,你的应用可以利用这些接口使用更多的微信原生能力和微信的操控能力, 以使得你的应用有更强大的智能,更好的用户体验。
除了以下章节所描述的各类接口。拍照、上传图片、扫码、微信支付、地理位置上报等更多的接口已经或正在抓紧开放中,更多信息也请参考微信相关网站了解.
1、隐藏微信中网页右上角按钮
企业号在有需要时(如不需要用户分享某个页面),可在网页中通过JavaScript代码隐藏网页右上角按钮。
接口调用代码(JavaScript)
function&onBridgeReady(){&&WeixinJSBridge.call('hideOptionMenu');&}&&if&(typeof&WeixinJSBridge&==&&undefined&){&&&&&if(&document.addEventListener&){&&&&&&&&&document.addEventListener('WeixinJSBridgeReady',&onBridgeReady,&false);&&&&&}else&if&(document.attachEvent){&&&&&&&&&document.attachEvent('WeixinJSBridgeReady',&onBridgeReady);&&&&&&&&&&document.attachEvent('onWeixinJSBridgeReady',&onBridgeReady);&&&&&}&}else{&&&&&onBridgeReady();&}&
隐藏底部导航栏没有返回值。(需要显示请把hideOptionMenu换成showOptionMenu)
企业号在有需要时(如认为用户在该页面不会用到浏览器前进后退功能),可在网页中通过JavaScript代码隐藏网页底部导航栏。
接口调用代码(JavaScript)
function&onBridgeReady(){&&&&WeixinJSBridge.call('hideToolbar');&}&&if&(typeof&WeixinJSBridge&==&&undefined&){&&&&&if(&document.addEventListener&){&&&&&&&&&document.addEventListener('WeixinJSBridgeReady',&onBridgeReady,&false);&&&&&}else&if&(document.attachEvent){&&&&&&&&&document.attachEvent('WeixinJSBridgeReady',&onBridgeReady);&&&&&&&&&&document.attachEvent('onWeixinJSBridgeReady',&onBridgeReady);&&&&&}&}else{&&&&&onBridgeReady();&}&
隐藏底部导航栏没有返回值。(需要显示顶部导航栏,请把hideToolbar换成showToolbar)
为了方便开发者根据用户的网络状态来提供不同质量的服务,企业号可以在企业号内部的网页中使用JavaScript代码调用来获取网络状态。
接口调用代码(JavaScript)
function&onBridgeReady(){&&WeixinJSBridge.invoke('getNetworkType',{},&&&&&&&&&function(e){&&&&&&&&&&&&&WeixinJSBridge.log(e.err_msg);&&&&&&&&&});&}&&if&(typeof&WeixinJSBridge&==&&undefined&){&&&&&if(&document.addEventListener&){&&&&&&&&&document.addEventListener('WeixinJSBridgeReady',&onBridgeReady,&false);&&&&&}else&if&(document.attachEvent){&&&&&&&&&document.attachEvent('WeixinJSBridgeReady',&onBridgeReady);&&&&&&&&&&document.attachEvent('onWeixinJSBridgeReady',&onBridgeReady);&&&&&}&}else{&&&&&onBridgeReady();&}&
获取用户网络状态的返回值如下:
network_type:wifi&wifi网络&network_type:edge&非wifi,包含3G/2G&network_type:fail&网络断开连接&network_type:wwan(2g或者3g)&
在微信内置浏览器中被访问的网页,可使用该JavaScript代码关闭当前网页。
主要使用场景: 微信用户在企业号会话中点击外链到达企业号的网页,在用户完成操作后,企业号(网页方)可调用此接口关闭当前网页窗口,使用户返回会话。
接口调用代码(JavaScript)
WeixinJSBridge.invoke('closeWindow',{},function(res){&&&&&&&&});&
关闭成功返回&close_window:ok&,关闭失败返回&close_window:error&。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&&&&&的更多文章
《Android 手机/平板电脑开发新挑战(含DVD光盘1张)》全面介绍
既然强大的Android Studio来了,有什么理由不去用呢?
讲师: 0人学习过讲师: 21人学习过讲师: 255人学习过
iOS从最初的惊艳到后来的成熟,再到现在的转变,被誉
日-6日,GMIC 北京 2014全球移动互联网大会
日-6日,GMIC 北京 2014全球移动互联网大会
本书对开发XML应用程序给予了详细指导,其中一些应用程序甚至对于您来说是完全陌生的。这些应用程序包括XML 1.0,以及与XSLT、XQ
Windows Phone专家
Android开发专家
51CTO旗下网站}

我要回帖

更多关于 微信填写服务器配置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信