微信开放支付接口申请,所有认证过的服务号均可申请

  “微信支付”终于来了!

  一直让大家翘首以盼的微信最核心的杀手锏——“微信支付”终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的开发者可以登录公众平台申请 App 支付功能。未开通公众号的 APP 开发者,我们将在近期开放,届时可在微信开放平台申请。

  此次微信支付开放申请主要向微信公众账号中的服务账号,所有之前经过认证的服务账号,均有资格申请微信支付接口。据了解,申请微信支付,需要填写商户基本资料、业务基本资料、财务审核资料。通过审核了的商户才能进入开发流程,通过开发接口文档的指引,完成开发。此后签订合同并缴纳保证金后,申请全网发布,即可开通微信支付能力。

  在此之前,微信一直没有明确“支付接口”的申请规则,只有极小部分商家获取到了内测的资格。全面开放支付接口的申请,也意味着经过数月的测试,微信的支付能力,以及和线下移动支付场景的匹配,已经基本达到预期,是时候放开手脚,大举进军移动支付领域了。

  在不久之前,微信公众平台刚刚调整过一次公众账号认证体系,订阅号可获得“自定义菜单”接口,而服务号则可获取所有高级接口。全面开放支付接口的申请,之前所有关于微信服务账号的想象,都将得以落地。

  另外据我们了解,除了全面开放支付接口,微信还将推出线下 POS 机——微 POS。微 POS 主要面向本地生活服务商家提供支付解决方案,商家通过服务员端输入金额后,自动生成二维码,消费者使用微信扫码进入支付页面,输入密码后完成支付。

  也就是说,不仅仅是推广电子支付,微信还想要借助“微信支付”颠覆传统的线下支付,将整个生活服务领域的支付场景和微信支付进行融合。开放微信支付接口,也意味着微信已经准备就绪,将大大加速这一过程。

微信支付申请指引https://mp.weixin.qq.com/cgi-bin/readtemplate?t=news/app-apply-guide_tmpl&lang=zh_CN

微信商户服务中心https://mp.weixin.qq.com/cgi-bin/readtemplate?t=business/faq_tmpl

ERROR: The version of SQL Server in use does not support datatype 'datetime2'

我把程序中的Entity Framework的SQL2012的数据库转为SQL2005后

出现了错误:

The version of SQL Server in use does not support datatype 'datetime2'.

解决办法:

把.edmx后缀文件中的

<Schema Namespace="NerdDinnerModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2012" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">

改为

<Schema Namespace="NerdDinnerModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">

即可

微软开放了.NET 4.5.1的源代码

.NET Reference Source 发布了 beta 版,可以在线浏览 .NET Framework 4.5.1 的源代码,并且可以通过配置,在 Visual Studio 2013 中调试 .NET Framework

  .NET Framework 团队的项目经理 Alok Shriram 在.NET Framework 的博客中撰文介绍了最新的 .NET Reference Source。它不仅可以用来浏览最新的 .NET 代码,而且通过强大的 Roslyn,改善了“Go to Defination”和“Finding Reference”的在线体验。此外,开发者还可以下载整个源代码包,在 Visual Studio 中打开并浏览。使用 Schabse Laks 编写的插件,可以在 VS 中直接导航到该网站。

  通过简单的配置,开发者可以在 Visual Studio 中单步调试 .NET Framework 4.5.1 及其后续补丁和更新。这无疑是广大开发者翘首以盼的功能。启动 Visual Studio 2013,打开 Tools -> Options -> Debugging -> General 菜单,进行如下配置:

  • 禁用 Just My Code
  • 禁用 Step over properties and operators
  • 禁用 Require source files to exactly match the original version
  • 选中 Enable .NET Framework source stepping
  • 选中 Enable source server support

  这样,开发者在调试代码时,就可以通过 F11 直接进入 .NET 代码。

  这并不是微软第一次开放 .NET Framework 的源代码。早在 2007 年,他们就第一次公布了 .NET 3.5 的源代码并支持 Visual Studio 调试。并且对于后续的 4.0 和 4.5,也都提供了相应的源代码包。但当框架升级时,这些旧的包就变得毫无价值了。从 4.5.1 开始,.NET Framework 团队彻底改变了符号索引和发布的过程,使其与构建过程同步,这样在新版本发布时,相应的 PDB 文件也会从 Reference Source 网站进行更新。

  目前的 beta 站点只是临时的,届时将会取代现在的旧站点。后续微软也会将还未公布源代码的程序集逐步添加进来。

  新的 .NET Reference Source 许可协议回归到了 MS-RSL,这也使得像 Mono 这样的团队可以放心大胆地使用。

  正如 Scott Hanselman所说:微软可能并不是开源的,但却绝对是源代码开放的。

SQL Server 2005/2008 加密存储过程解密

SQL Server 2005 以上存储过程无法进行查看和编辑,解密存储过程代码如下:

Create PROCEDURE [dbo].[sp_windbi$decrypt]
(@procedure sysname = NULL, @revfl int = 1)
AS
/*
调用形式为:
exec dbo.sp__windbi$decrypt @procedure,0
如果第二个参数使用1的话,会给出该存储过程的一些提示。
--版本4.0  修正存储过程过长解密出来是空白的问题
*/
SET NOCOUNT ON
IF @revfl = 1
BEGIN
PRINT '警告:该存储过程会删除并重建原始的存储过程。'
PRINT ' 在运行该存储过程之前确保你的数据库有一个备份。'
PRINT ' 该存储过程通常应该运行在产品环境的一个备份的非产品环境下。'
PRINT ' 为了运行这个存储过程,将参数@refl的值更改为0。'
RETURN 0
END
DECLARE @intProcSpace bigint, @t bigint, @maxColID smallint,@procNameLength int
select @maxColID = max(subobjid) FROM
sys.sysobjvalues WHERE objid = object_id(@procedure)
--select @maxColID as 'Rows in sys.sysobjvalues'
select @procNameLength = datalength(@procedure) + 29
DECLARE @real_01 nvarchar(max)
DECLARE @fake_01 nvarchar(max)
DECLARE @fake_encrypt_01 nvarchar(max)
DECLARE @real_decrypt_01 nvarchar(max),@real_decrypt_01a nvarchar(max)
declare @objtype varchar(2),@ParentName nvarchar(max)
select @real_decrypt_01a = ''
--提取对象的类型如是存储过程还是函数,如果是触发器,还要得到其父对象的名称
select @objtype=type,@parentname=object_name(parent_object_id)
from sys.objects where [object_id]=object_id(@procedure)
-- 从sys.sysobjvalues里提出加密的imageval记录
SET @real_01=(SELECT top 1 imageval FROM sys.sysobjvalues WHERE objid =
object_id(@procedure) and valclass = 1 order by subobjid)

--创建一个临时表
create table #output ( [ident] [int] IDENTITY (1, 1) NOT NULL ,
[real_decrypt] NVARCHAR(MAX) )
--开始一个事务,稍后回滚
BEGIN TRAN
--更改原始的存储过程,用短横线替换
if @objtype='P'
  SET @fake_01='ALTER PROCEDURE '+ @procedure +' WITH ENCRYPTION AS select 1
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/'
else if @objtype='FN'
  SET @fake_01='ALTER FUNCTION '+ @procedure +'() RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/ END'
else if @objtype='V'
  SET @fake_01='ALTER view '+ @procedure +' WITH ENCRYPTION AS select 1 as col
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/'
else if @objtype='TR'
  SET @fake_01='ALTER trigger '+ @procedure +' ON '+@parentname+'WITH ENCRYPTION AFTER INSERT AS RAISERROR (''N'',16,10)
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/'
EXECUTE (@fake_01)
--从sys.sysobjvalues里提出加密的假的
SET @fake_encrypt_01=(SELECT top 1 imageval FROM sys.sysobjvalues WHERE objid =
object_id(@procedure) and valclass = 1 order by subobjid )
if @objtype='P'
  SET @fake_01='Create PROCEDURE '+ @procedure +' WITH ENCRYPTION AS select 1
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/'
else if @objtype='FN'
  SET @fake_01='CREATE FUNCTION '+ @procedure +'() RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/ END'
else if @objtype='V'
  SET @fake_01='Create view '+ @procedure +' WITH ENCRYPTION AS select 1 as col
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/'
else if @objtype='TR'
  SET @fake_01='Create trigger '+ @procedure +' ON '+@parentname+'WITH ENCRYPTION AFTER INSERT AS RAISERROR (''N'',16,10)
  /**//*'+REPLICATE(cast('*'as nvarchar(max)), datalength(@real_01) /2 - @procNameLength)+'*/'
--开始计数
SET @intProcSpace=1
--使用字符填充临时变量
SET @real_decrypt_01 = replicate(cast('A'as nvarchar(max)), (datalength(@real_01) /2 ))
--循环设置每一个变量,创建真正的变量
--每次一个字节
SET @intProcSpace=1
--如有必要,遍历每个@real_xx变量并解密
WHILE @intProcSpace<=(datalength(@real_01)/2)
BEGIN
--真的和假的和加密的假的进行异或处理
SET @real_decrypt_01 = stuff(@real_decrypt_01, @intProcSpace, 1,
NCHAR(UNICODE(substring(@real_01, @intProcSpace, 1)) ^
(UNICODE(substring(@fake_01, @intProcSpace, 1)) ^
UNICODE(substring(@fake_encrypt_01, @intProcSpace, 1)))))
SET @intProcSpace=@intProcSpace+1
END

--通过sp_helptext逻辑向表#output里插入变量
insert #output (real_decrypt) select @real_decrypt_01
--select real_decrypt AS '#output chek' from #output --测试
-- -------------------------------------
--开始从sp_helptext提取
-- -------------------------------------
declare @dbname sysname
,@BlankSpaceAdded int
,@BasePos int
,@CurrentPos int
,@TextLength int
,@LineId int
,@AddOnLen int
,@LFCR int --回车换行的长度
,@DefinedLength int
,@SyscomText nvarchar(max)
,@Line nvarchar(255)
Select @DefinedLength = 255
SELECT @BlankSpaceAdded = 0 --跟踪行结束的空格。注意Len函数忽略了多余的空格
CREATE TABLE #CommentText
(LineId int
,Text nvarchar(255) collate database_default)
--使用#output代替sys.sysobjvalues
DECLARE ms_crs_syscom CURSOR LOCAL
FOR SELECT real_decrypt from #output
ORDER BY ident
FOR READ ONLY
--获取文本
SELECT @LFCR = 2
SELECT @LineId = 1
OPEN ms_crs_syscom
FETCH NEXT FROM ms_crs_syscom into @SyscomText
WHILE @@fetch_status >= 0
BEGIN
SELECT @BasePos = 1
SELECT @CurrentPos = 1
SELECT @TextLength = LEN(@SyscomText)
WHILE @CurrentPos != 0
BEGIN
--通过回车查找行的结束
SELECT @CurrentPos = CHARINDEX(char(13)+char(10), @SyscomText,
@BasePos)
--如果找到回车
IF @CurrentPos != 0
BEGIN
--如果@Lines的长度的新值比设置的大就插入@Lines目前的内容并继续
While (isnull(LEN(@Line),0) + @BlankSpaceAdded +
@CurrentPos-@BasePos + @LFCR) > @DefinedLength
BEGIN
SELECT @AddOnLen = @DefinedLength-(isnull(LEN(@Line),0) +
@BlankSpaceAdded)
INSERT #CommentText VALUES
( @LineId,
isnull(@Line, N'') + isnull(SUBSTRING(@SyscomText,
@BasePos, @AddOnLen), N''))
SELECT @Line = NULL, @LineId = @LineId + 1,
@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded = 0
END
SELECT @Line = isnull(@Line, N'') +
isnull(SUBSTRING(@SyscomText, @BasePos, @CurrentPos-@BasePos + @LFCR), N'')
SELECT @BasePos = @CurrentPos+2
INSERT #CommentText VALUES( @LineId, @Line )
SELECT @LineId = @LineId + 1
SELECT @Line = NULL
END
ELSE
--如果回车没找到
BEGIN
IF @BasePos <= @TextLength
BEGIN
--如果@Lines长度的新值大于定义的长度
While (isnull(LEN(@Line),0) + @BlankSpaceAdded +
@TextLength-@BasePos+1 ) > @DefinedLength
BEGIN
SELECT @AddOnLen = @DefinedLength -
(isnull(LEN(@Line),0) + @BlankSpaceAdded)
INSERT #CommentText VALUES
( @LineId,
isnull(@Line, N'') + isnull(SUBSTRING(@SyscomText,
@BasePos, @AddOnLen), N''))
SELECT @Line = NULL, @LineId = @LineId + 1,
@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded =
0
END
SELECT @Line = isnull(@Line, N'') +
isnull(SUBSTRING(@SyscomText, @BasePos, @TextLength-@BasePos+1 ), N'')
if LEN(@Line) < @DefinedLength and charindex(' ',
@SyscomText, @TextLength+1 ) > 0
BEGIN
SELECT @Line = @Line + ' ', @BlankSpaceAdded = 1
END
END
END
END
FETCH NEXT FROM ms_crs_syscom into @SyscomText
END
IF @Line is NOT NULL
INSERT #CommentText VALUES( @LineId, @Line )
select Text from #CommentText order by LineId
CLOSE ms_crs_syscom
DEALLOCATE ms_crs_syscom
DROP TABLE #CommentText
-- -------------------------------------
--结束从sp_helptext提取
-- -------------------------------------
--删除用短横线创建的存储过程并重建原始的存储过程
ROLLBACK TRAN
DROP TABLE #output
go

TFS2013升级Update 2错误 - TFS255440

TF255440: The following account has a SQL Server login, but the login was denied access: lsw\lishewen. The server selected to host the databases for Team Foundation Server is: lswserver. The SQL Server login associated with the user account must be granted access to the SQL Server instance on that server.

解决方法:

首先将你的账号加入sqlserver管理员组(如果是,则不用加)

如security\logins下添加账号   赋予systemadmin,serveradmin权限

利用旧版Android漏洞的E-Z-2-Use攻击代码发布

  利用 Android 操作系统 WebView 编程接口漏洞的攻击代码已作为一个模块加入到开源漏洞利用框架 Metasploit 中。漏洞影响 Android 4.2 之前的版本,Google 在 Android 4.2 中修正了这个漏洞,但根据官方统计,超过五成用户仍然使用存在漏洞的旧版本。

  WebView 的漏洞允许攻击者在 Android 浏览器和其��应用中注入恶意 JavaScript 代码,获得与目标程序相同的访问权限,攻击者可以开启一个 shell 窗口访问受害者的文件系统、照相机,地理位置数据、SD 卡数据和地址簿。漏洞还可通过不安全网络的中间人攻击触发。漏洞存在于 Android 系统中,而不是私有的 GMS 应用平台,只有更新系统才能修正漏洞。安全研究人员 Tod Beardsley 希望,攻击代码的披露能迫使供应商尽快升级系统。

ECShop实现立刻购买与添加到购物车并存的方法

在后台开启“一步购物则”可以不用到购物车“直接结算” 。从而实现立刻购买。然而购物车的功能又没有了。有没有像淘宝那样即可以立刻购买。又有购物车功能呢?

    1、首先我们先将“添加购物车”的跳转链接复制替换“收藏商品”的按钮上然后设一个bool值为1 。

<a href="javascript:bool =1;addToCart({$goods.goods_id})">。

    2、然后打开JS处理文件“common.js” ,在这个脚本的第一行代码之上加一个全局变量var bool =0; 查找点击购物车之后的那条链接即:flow.php?step=cart  ,找到这个(在第88行
那块)之后,在下面加这句话(bool == 1) && (cart_url = 'flow.php?step=consignee');

    意思是 当bool = 1 条件满足时 则cart_url链接到  'flow.php?step=consignee' 直接购买的页面

    这样就实现了“立刻购买”与“添加到购物车”并存的方法

如何在Windows Store应用闪退的时候自动生成dump

    当开发者在测试或者用户使用Windows store 应用的时候,我们可能希望Windows store程序能够在发生异常的时候自动生成dump文件以便于以后分析。在写桌面应用的时候,我们可以通过调用API MiniDumpWriteDump来实现。但是这个API在Windows store应用中是不被支持的。那么有没有其他办法来生成dump了呢? 其实以前的Windows Error Reporting机制针对Windows store应用还是有效的,所以你可以通过改写注册表的办法让应用程序自动生成dump,具体步骤如下:

1) 运行REGEDIT.EXE 找到 “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps”. 如果该键不存在的话则新建LocalDumps 键,。

2) 创建一个与你的Windows store应用进程同名的子键,比如说MyApp.exe。

3) 在子键中创建一个名为DumpFolder,类型为REG_EXPAND_SZ的值,设置它的值为你需要生成dump的目录(保证要存在),比如说C:\Dumps。

4) 在同一个子键中创建一个名为DumpCount,类型为REG_DWORD的值,设置他的值为5 (生成dump的最大数目)。

5) 在同一个子键中创建一个名为DumpType,类型为REG_DWORD的值,设置他的值为2 (full dump)。

其结果如图所示:

这样在你的Windows store应用闪退的时候就可以自动得到full dump了。你可以将上述注册表键值放在一个注册表文件中,当用户有闪退的情况是,让用户倒入该注册表文件,然后将生成的dump文件上传。

别错把需求当市场

  创业团队经常弄混了「需求」与「市场」的差别,从根本上说,需求是需求,但市场的构成除了有需求存在,还得有供给,同时透过共识的价格交集而成交,方能形成市场。简单说,有需求未必能形成市场,那得看供给与价格;反过来说,只有供给而不存在需求,或者供给与需求具备但价格没有共识,市场也不存在。

  虽然是很简单的道理,但我还是经常发现多数团队并没有把重心摆在谈论「市场」,而是谈论「需求」,甚至连需求也没碰触到,只谈自己做了什么、想做什么,仿佛产品、服务做出来就卖得掉,这当然是比较不成熟的创业观点,但事实上多数团队就是如此。

  当局者迷是很正常的事,即便我自己创业过几次,每每听到不错的点子还是会瞬间陷入「过度放大」的迷思里,一下子以为可以接触的市场很大,可以满足的需求很多,但实际上根本就只有很少数的消费者才可能采用这个产品或服务,这当中最大的问题还不在于消费者少,而在于你根本不知道这群消费者在哪里。

  等到奋不顾身执行下去才恍然大悟,原来要搜寻出这群人得花非常多钱,然而业绩成长速度跟不上你的烧钱速度,自己都开始怀疑当初的想法是否真的有这么好,追本溯源来说还是老话那一句,只想到自己想做的,以为点子很好,但这都是供给端、制造端的思维,完全忽略了「需求」,更别提到底有没有存在那个你自以为存在的「市场」。

  举一个最近朋友的案例,一个多月前他偶然知道,原来自己某个远亲是在种苹果的,品质优良又可口,当他了解零售的苹果价格与生产端有不小的差距后,自己兴起了想直接跟远亲批苹果去卖的念头。他认为他有巨大的成本优势,透过网路去卖应该可以有不少的利润,于是跑来跟我聊他的点子可不可行。

  于是我问他是否知道苹果零售市场一年多大产值?市售苹果有几种?消费者多半都在哪里购买?是菜市场、大卖场、便利商店还是其他?分别是哪些人去买?买苹果的理由或需求是什么?不同品种的苹果大约落在什么价位?如果多数消费者在实体通路卖,那虚拟通路是加分还是减分?

  他听完我的问题,顿时愣了一下,不知道该怎么回答。不过他这样的情况还算是好的,因为至少「苹果零售市场」是存在的,也就是说最差的情况下,他就是去菜市场租个小摊位卖苹果,再怎么糟糕应该一天也能有个几百块进帐,划不划算就是另一回事,但很多团队是自己做了一个产品,却不知道最后应该跟谁收钱?哪些人会付钱?这就是因为没弄清楚到底最后该走向什么市场的原因。

  如果是我,我会先把上述的「市场」问题先弄清楚,接着才是思考应该怎么切入「苹果零售市场」。比方说,假设苹果零售市场一年有 50 亿的成交值,其中实体通路与虚拟通路大约是9:1,实体通路中菜市场、大卖场、便利商店各占1/3,网路与电视购物则是各1/2;菜市场购买的族群是婆婆妈妈,平均年龄 40 岁以上;大卖场则是以小家庭为主,便利商店则是 25 岁左右的 OL;以需求来说,妈妈们买苹果可能是给家人吃,或者新手妈妈是打成苹果泥给小 baby 吃;为了健康因素吃的可能占了 50%,为了加入沙拉当作正餐的因素可能占了 20%。

  分析完之后可能你最后卖的未必是苹果本身,而是选择卖苹果泥,切入苹果零售的网路市场,同时针对新手妈妈为销售对象,也因此产生了广告费该买什么关键字,或者该与有许多新手妈妈存在、活跃的网站策略合作,部落客也专找有影响力的新手妈妈撰写专文推荐。

  这里我想说的重点是「顺序」,就是你得先有「市场」为基础的分析,于是有了某种商业出发点,接着才去探讨消费者行为背后的需求,进而衍生出你可能可以做什么产品或服务,去满足这个需求,进而切入该市场。这样就能确保你做出来的东西可以对应到某个市场去,而不是做出来了却不知道自己应该怎么走下去。

  这道理不会只用在卖苹果,卖任何东西都一样,必然会指引你走向某个特定的市场--「有供、有需、有共识价格的市场」,而不是你自以为会有的需求。诚如我所说,Google 并不是经营一个「搜索市场」,因为没有人为搜索付费,这是一个只有供给没有付费的「需求」,同理 Facebook 是经营一个「社交网站」而非「社交市场」,但他们两者都从「(网路)广告市场」赚钱,而广告市场老早就存在,至少网路兴起之前,多数广告是买在报纸、杂志跟电视。

  因此,无论你的创业多创新,你的收入来源最终必然指向某个「市场」,而且通常是既有的、存在许久的市场。历史上,只有非常非常少数的发明可以创造「新市场」,你会不会是那个引领潮流的人要看你的本事,但如果你没什么资源,或者创业经验还不够,我会建议你尽可能别去做「创造市场」的创业路,而是去做一个可以从既有市场赚到钱的创业路,应该会比较妥当一些。即便你认为自己的产品很创新,但产品的创新未必能真正创造新市场,因为最终它还是得回归到能解决某些问题,对应某个市场,你才赚得到钱。

  总而言之,别错把需求当市场,需求只是市场的一部份,有人真正愿意为你所做的事情掏钱才是商业的基础,也是你创业的根本之道。胜兵先胜而后求战,败兵往往是先战而后求胜,虽然看起来只是次序不同,但其中风险与经营智慧却是天壤之别。