微商城---傻瓜式教你微信支付收货地址接口开发(PHP)

微信中比较好用的接口功能里,微信收货地址接口应该算一个,它本身提供了地址的添加删除使用,可以使微商城省去收货地址开发的步骤。微支付这个步骤并不难,本身有提供demo给你,稍微改改就能用,看一下概念也清晰了。收货地址却没有。

此文章是以PHP来实现。

在做之前先确定自己有微信公众平台的账号,并且申请了微支付,至少完成了流程前三步。

首先确定一下自己的appId,及appSecret这两个在微信支付申请成功的邮件或者微信公众平台的开发者中心查看获得。


一.接下来是文档提及的右侧这些参数的获得。

appId scope signType 这三个就不用说了,相信你们可以理解。

timeStamp 和nonceStr分别可以用PHP的 

$timestamp = time();
$noncestr = rand(100000,999999);
比较麻烦的是 addrSign这个参数需要 accesstoken appid noncestr timestamp url进行字典序拼接并且SHA1的加密。我们分一下几个步骤来就不会出错了。

1.获取accesstoken

需要先在公众平台后台-开发者中心-接口权限表-OAuth2.0网页授权中设置可以获取授权的域名

通过以下链接获取授权 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=redirect_uri&response_type=code&scope=snsapi_base&state=123#wechat_redirect

代码如下:

<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=redirect_uri&response_type=code&scope=snsapi_base&state=123#wechat_redirect">进入</a>

记住要,替换里面的APPID,redirect_uri为自己的,redirect_uri是你要回调的地址

$url="http://baidu.com/wechatpay/addr.php";
$info=urlencode($url);

特别注意:scope对应的值必须是snsapi_basestate则可以随便填写。请求这个链接后会跳转到$url这个地址

返回的链接中是带有code参数的,可以用$_GET获取。接着

$str=$_GET['code'];
            $info="https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$str}&grant_type=authorization_code";
            $data=file_get_contents("$info");
            $user_array=json_decode("$data",true);
<span style="white-space:pre">	</span>$accesstoken=$user_array['access_token'];
//通过file_get_contents获取json然后用json_decode转为数组,就可以得到access_token了~在此原谅我英文不好,所以命名方式有点难以理解
2.获取调用接口的页面的URL
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
这样子是最不会出错了。
3.拼接算法。

进行加密的字段有accesstokenappidnoncestrtimestampurl。要进行字典序并且URL键值式拼接成字符串。(注意,参与签名的参数的key必须小写,顺序按keyASCII码从小到大排序。于是如下:

$data=array("accesstoken"=>"{$accesstoken}","appid"=>"{$appid}","noncestr"=>"{$noncestr}","timestamp"=>"{$timestamp}","url"=>"{$url}");
$signPars = '';
		ksort($data);
		foreach($data as $k => $v) {
			if("" != $v && "sign" != $k) {
				if($signPars == '')
					$signPars .= $k . "=" . $v;
				else
					$signPars .=  "&". $k . "=" . $v;
			}
		}
		$addrSign = SHA1($signPars);

这样子就得出 addrSign.接下去第二步了。

二.微信调用

必然是调用微信的JSAPI的代码,这是最关键的。细节错误一定要注意。

<span style="font-family:Microsoft YaHei;background-color: rgb(153, 255, 153);"><script language="javascript"></span>
<span style="font-family:Microsoft YaHei;"><span style="background-color: rgb(153, 255, 153);">function getaddr(){

WeixinJSBridge.invoke('editAddress',{
</span><span style="background-color: rgb(255, 0, 0);">"appId" : "<?php echo $appid ?>",
"scope" : "jsapi_address",
"signType" : "sha1",
"addrSign" : "<?php echo $addrsign ?>",
"timeStamp" : "<?php echo $timestamp ?>",
"nonceStr" : "<?php echo $noncestr ?>",</span><span style="background-color: rgb(153, 255, 153);">
},function(res){
</span></span>
<span style="font-family:Microsoft YaHei;"><span style="background-color: rgb(153, 255, 153);">//alert(res.err_msg);</span></span>
<span style="font-family:Microsoft YaHei;background-color: rgb(153, 255, 153);">if(res.err_msg == 'edit_address:ok'){
</span>
<span style="font-family:Microsoft YaHei;background-color: rgb(153, 255, 153);">alert("收件人:"+res.userName+"  联系电话:"+res.telNumber+"  收货地址:"+res.proviceFirstStageName+res.addressCitySecondStageName+res.addressCountiesThirdStageName+res.addressDetailInfo+"  邮编:"+res.addressPostalCode);}</span>
<span style="font-family:Microsoft YaHei;background-color: rgb(153, 255, 153);">});}</span>
<span style="font-family:Microsoft YaHei;background-color: rgb(153, 255, 153);"></span><pre name="code" class="html"><input type="submit" class="submit" οnclick="getaddr()" value="确定"/>


 

这一步要注意的是红色部分这些的参数必须是字符串格式。 可用alert测试一下弹出res.err_msg内容。

res.err.msg弹出的内容


除此之外,如果

是弹出access denied这个东西的话,或者无响应的话。。。那么你很有可能遇到跟我一样的问题,这个问题让我纠结了四天了。。。

就是,你要特别注意一点,收货地址的页面跟微信支付一样都要放在授权目录!!!只有授权目录才能调起来,我被坑了四天。。。T T。。。才有了写这个文章想法来提醒大家。

以下附图是注意的事项。如果还不行可以看看。


代码就到这里了,一般按流程来,是不会有什么问题的。相信这篇文章可以让你更快的理解使用。



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值