//使用微信共享收货地址在跳转到当前页面的路径上必须要包含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. TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要

    在学C/C++  Java等强类型语言时,变量类型是唯一的,需要先指定.PHP JavaScript等弱类型语言时,无需指定变量类型 但是,TypeScript里面的联合类型 (Union Type) ...

  2. matlab中如何定义函数

    首先建立M文件或直接点击(File/New/Function)建立函数文件,其中函数文件的格式是: function [输出变量] = 函数名称(输入变量) % 注释 % 函数体 如下所示,是编写的一 ...

  3. Skywalking Php注册不上问题排查

    Skywalking是一款分布式追踪应用,具体介绍可以参考 skywalking. 最近公司的一个Php应用在Skywalking后台查不到数据了: 登录到某台服务器上发现注册不上,启动时就报错了: ...

  4. 分布式文件系统之FastDFS安装部署

    前面我们了解了分布式文件系统mogilefs的框架以及安装部署和简单使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/MogileFS/:今天我们来了解下 ...

  5. 刷题[BJDCTF 2nd]简单注入

    解题思路 打开发现登陆框,随机输入一些,发现有waf,然后回显都是同样的字符串.fuzz一波,发现禁了挺多东西的. select union 等 这里猜测是布尔盲注,错误的话显示的是:You konw ...

  6. pwnable.kr-uaf-witeup

    没错,这道题超纲了,代码调试能力很差很差. 一些相关小笔记. UAF是在内存释放后,原指针仍然指向此内存,可通过其他填充操作将此内存值设为指定的值,使得指针指向特定值. 分析程序.本程序中,可输入1. ...

  7. 曹工说Tomcat:200个http-nio-8080-exec线程全都被第三方服务拖住了,这可如何是好(上:线程模型解析)

    前言 这两年,tomcat慢慢在新项目里不怎么接触了,因为都被spring boot之类的框架封装进了内部,成了内置server,不用像过去那样打个war包,再放到tomcat里部署了. 但是,内部的 ...

  8. ucore操作系统学习笔记(一) ucore lab1系统启动流程分析

    一.ucore操作系统介绍 操作系统作为一个基础系统软件,对下控制硬件(cpu.内存.磁盘网卡等外设),屏蔽了底层复杂多样的硬件差异:对上则提供封装良好的应用程序接口,简化应用程序开发者的使用难度.站 ...

  9. WordPress用户角色权限

    [转自:群燕小站(http://www.zqunyan.com):原文链接: http://www.zqunyan.com/158.html] WordPress默认的用户角色有5个:订阅者,投稿者, ...

  10. C#中WebBrowser获取页面标签class值

    由于class是JavaScript的保留关键字 所以在C#中使用GetAttribute("className")来获取hmtlElement的class值 而不是GetAttr ...