//使用微信共享收货地址在跳转到当前页面的路径上必须要包含Code和state这两个获取用户信息的参数
//例如 <a href="ProductOrder.aspx?OID=<%=dr["ID"].ToString() %>&SID=<%=SID %>&code=<%=code%>&state=1&showwxpaytitle=1" //class="right" >安全支付</a>

<script type="text/javascript">
//前台微信共享收货地址
function editAddress() {
var URL = window.location.href; //当前页面的路径
$.ajax({
type: "POST",
url: "/***/handler/OrderWaitHandler.ashx",
data: "otype=Address&path=" + URL,
async: false,
success: function (msg) {
if (msg == "-99") {
ShowFW_Guanzhu("请先关注该公众号,再进行下单操作!");
} else if (msg == "-98") {
ShowFW("出现未知的错误,请联系管理员!");
} else {
var argument = msg.split(",");
WeixinJSBridge.invoke('editAddress', {
"appId": argument[0], //公众号AppID
"scope": "jsapi_address", //获得权限
"signType": "sha1", //加密方法
"addrSign": argument[1], //签名
"timeStamp": argument[2], //时间戳
"nonceStr": argument[3] //随机字符串
}, function (res) {
if (res.err_msg == "edit_address:ok") {
//收货信息赋值
document.getElementById("UserName").value = res.userName;
document.getElementById("telNumber").value = res.telNumber;
document.getElementById("firstName").value = res.proviceFirstStageName;
document.getElementById("secondName").value = res.addressCitySecondStageName;
document.getElementById("thirdName").value = res.addressCountiesThirdStageName;
document.getElementById("detalInfo").value = res.addressDetailInfo;
}
});

}
}
});
}

</script>

/// <summary>
/// 共享收货地址
/// </summary>
/// <param name="context"></param>
/// <param name="returnMsg"></param>
/// <returns></returns>
private bool EditAddress(HttpContext context, ref string returnMsg)
{
try
{
string AccessToken = "";//AccessToken
string URL = context.Request["path"].Trim().ToString() + "&SID=1&code=" + context.Session["code"].ToString() + "&state=1&showwxpaytitle=1"; //当前页面的URL
if (context.Session["UID"] == null || context.Session["UID"].ToString() == "0" || context.Session["UID"].ToString() == "")
{
returnMsg = "-99";//请先关注公众号,才能进行下订单操作
return false;
}
if (context.Session["accessToken"] != null || context.Session["accessToken"].ToString() != "")
{
AccessToken = context.Session["accessToken"].ToString(); //通过Oauth2获取的AccessToken
string Nonce = CreateRandomCode(15).ToLower(); //随机字符串
string time = ConvertDateTimeInt(DateTime.Now).ToString();//时间戳
string sha1 = "accesstoken=" + AccessToken +
"&appid=" + PayHandle.AppID.ToString() + //公众号APPID
"&noncestr=" + Nonce +
"&timestamp=" + time +
"&url=" + URL;
string sha =Hash(sha1).ToLower(); //HASH加密
returnMsg = PayHandle.AppID.ToString() + "," + sha + "," + time + "," + Nonce;//共享收货地址请求参数
return true;
}
else
{
returnMsg = "-99";//请先关注公众号,才能进行下订单操作
return false;
}
}
catch (Exception ex)
{
T9.Util.LogUtil.WriteLog(ex.Message + "\r\n" + ex.StackTrace, "WebLog");
returnMsg = "-98";
return false;
}

}
/// <summary>
/// 生成随机字符串
/// </summary>
/// <param name="codeCount"></param>
/// <param name="allChar"></param>
/// <returns></returns>
public static string CreateRandomCode(int codeCount)
{
//验证码中的出现的字符,避免了一些容易混淆的字符。
string allChar = "3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,T,U,W,X,Y";
string[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -1;
bool breCreate = (codeCount < 6 && allCharArray.Length > 15);

Random rand = new Random();
for (int i = 0; i < codeCount; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(allCharArray.Length);
if (temp == t && breCreate)
{
return CreateRandomCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}
/// <summary>
/// datetime转换为unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
public int ConvertDateTimeInt(System.DateTime time)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (int)(time - startTime).TotalSeconds;
}
/// <summary>
/// Hash算法
/// </summary>
/// <param name="myStr"></param>
/// <returns></returns>
public string Hash(string myStr)
{
//建立SHA1对象
SHA1 sha = new SHA1CryptoServiceProvider();
//将mystr转换成byte[]
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(myStr);
//Hash运算
byte[] dataHashed = sha.ComputeHash(dataToHash);
//将运算结果转换成string
string hash = BitConverter.ToString(dataHashed).Replace("-", "");
return hash;
}

C# 微信共享收货地址 V1.6的更多相关文章

  1. 微信共享收货地址 edit_address:fail 吐白沫级解决方案

    又被微信坑了一整天,看完官方文档怎么测试都不通过,我一直怀疑是新版本微信支付我没有设置“共享收货地址”开关造成的. 后来经过验证,新版本不需要做这件事了. 那么,我没错,是微信的文档没及时更新... ...

  2. 微信支付开发(7) 收货地址共享接口V2

    关键字:微信公众平台 JSSDK 发送给朋友 收货地址共享接口 openAddress 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-open ...

  3. 微信支付v3开发(6) 收货地址共享接口

    请看新版教程  微信支付开发(7) 收货地址共享接口V2 本文介绍微信支付下的收货地址共享接口的开发过程. 一. 简单介绍 微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,兴许能够免填 ...

  4. 微信小程序-收货地址左滑删除

    我参照了其中的部分代码,如:bindtouchstart,bindtouchmove,bindtouchend事件多数组中偏移值的更改, 在结合微信 movable-area 和 movable-vi ...

  5. ecshop 订单-》设置默认收货地址,或者删除

    设置位置:ecs_users标的   country字段,默认是0,默认地址是 users_address 的address_id 设置默认收货地址 /** * 设置默认地址 * * @access ...

  6. 【地图API】收货地址详解2

    上次讲解的方法是: 在地图中心点添加一个标注,每次拖动地图就获取地图中心点,再把标注的位置设置为地图中心点.可参考教程:http://www.cnblogs.com/milkmap/p/6126424 ...

  7. GWYAlertSelectView 选择收货地址和选择联系人

    iOS 开发在app内(特别是在类似购物和旅游类)经常会用到选择,添加联系人和收货地址,而且经常都是在跳转界面,很是麻烦,今天我就自己封装了一个类似弹出视图的代码,方便了很多!demo地址: http ...

  8. 方便代理下单的EcStore收货地址一键分析插件,同时支持淘宝/京东/一号店

    使用EcStore开展分销的网站,代理需要经常代客下单,每个客户收货地址都不同,要选择和填写多个内容才能完成地址输入:省.市.区.详细地址.收货人姓名.手机电话等,非常麻烦,也容易输入错误.安装EcS ...

  9. DRF 商城项目 - 用户操作(收藏, 留言, 收货地址)

    个人收藏 整体逻辑类似于 个人中心 ( 个人中心的相关逻辑梳理详情  点击这里 ) 也是两个序列化组价的分流 查看收藏  ( list ) 详情指向 收藏详情 的组价 创建收藏 ( create ) ...

随机推荐

  1. docker 部署 zabbix

    docker部署zabbix   我相信大家都已经会再物理机上跑zabbix并且监控了,那么有没有想过在docker中跑zabbix?下面咱们来看看如何在docker中搭建zabbix并且监控 部署环 ...

  2. spring framework源码之SpringFactoriesLoader

    SpringFactoriesLoader 查询META-INF/spring.factories的properties配置中指定class对应的所有实现类. public abstract clas ...

  3. Java新特性:数据类型可以扔掉了?

    在很久很久以前,我们写代码时要慎重的考虑变量的数据类型,比如下面这些: 枚举:尽管在 JDK 5 中增加了枚举类型,但是 Class 文件常量池的 CONSTANT_Class_info 类型常量并没 ...

  4. 5.Selector详解

  5. PowerJob 从 0 到 1.9k star 的经历

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri 本文就是<讲解 PowerJob>系列的最后一篇文章了,纯粹是写点经历写点心路历程啥的,和大家道个别. ...

  6. 立下flag!

    从今日(2020年6月29日)开始,直到两个月的暑假结束2020年8月31日,每天vp一场div3,至少要ac4道题目.

  7. 从CPU缓存看缓存的套路

    一.前言 不同存储技术的访问时间差异很大,从 计算机层次结构 可知,通常情况下,从高层往底层走,存储设备变得更慢.更便宜同时体积也会更大,CPU 和内存之间的速度存在着巨大的差异,此时就会想到计算机科 ...

  8. PHP判断是否是微信浏览器访问的方法

    PHP判断是否是微信浏览器访问的方法 PHP判断是否是微信浏览器访问的方法 都是干货,微信开发可能需要用到,留着日后COPY. public function isWeichatBrowser() { ...

  9. Centos-分割文件-split

    split 分割文件,将一个文件分割为多个 相关选项 -b 指定文件大小,可以在size后面添加单位后缀,b表示512字节,k表示1KB,m表示MB -n 指定分割文件的长度,默认为1000行 -d ...

  10. ESD(静电释放)上半部分

    ESD(静电释放)上半部分 ESD:Electro-Static discharge静电释放 1.ESD静电释放的模式 1.1 人体放电模式(human body mode) 人体会释放静电,那么人体 ...