最近一周多进行微支付开发工作,总结一下关于微支付开发中遇到的问题。
如写得不对请大家提出,第一次自己写文章。嘿嘿...
1、申请微支付,登陆公众平台后(公众号为服务号并已认证),进入“服务”-“服务中心"-“商户功能”,完成基本资料的填写;
JS API与Native API
JS API:就是通过微信端进入你的微商城,在你的微商城中选购好要购买商品,然后再通过微支付进行付款,通过getBrandWCPayRequest接口来调用微支付
Native API:商家自己生成特定的URL,用户只需要直接点击这个链接或扫描这个链接二维码就可以直接进行支付,不需要选购商品什么的。
这里只说说JS API
JS API支付授权目录:就是你最终要进行支付的最后一级目录:http://www.xxxxx.com/支付文件所有目录或路径/ 最后"/"不要忘记
维权通知URL和告警通知URL直接填写相关URL就好了,如:http://www.xxxxxx.com/tmall/warning.aspx
以上几项一定要填对,如果资料审核通过后就很难改,目前是不允许改的,但不知道以后可不可以,在实际开发中,我发现还是蛮多人填错。
2、第一步全部审核通过后,将会有邮件发送给你,包括开发需要的APPID,paySignKey,appSecret,财付通partnerId,partnerKey信息
3、进行开发及测试,一定要认真看文档,只提一下开发中可能遇到问题
a.如需要测试,请先登陆公众平台,填好测试的地址及白名单
b.测试只能在申请微支付的公众号中进行测试
c.如使用.net版本DEMO需要注意的地方:WxPayHelper.cs这个类中的CreateBizPackage()方法,注意大小写及顺序
nativeObj.Add("appId",AppId);
nativeObj.Add("package",GetCftPackage());
nativeObj.Add("timestamp", ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString());
nativeObj.Add("noncestr",Wxpay.CommonUtil.CreateNoncestr());
nativeObj.Add("paySign",GetBizSign(nativeObj));
nativeObj.Add("signType",SignType);
需要换成以下代码:
nativeObj.Add("appId",AppId); nativeObj.Add("timeStamp", ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString()); nativeObj.Add("nonceStr", Wxpay.CommonUtil.CreateNoncestr()); nativeObj.Add("package",GetCftPackage()); nativeObj.Add("paySign", GetBizSign(nativeObj)); nativeObj.Add("signType", SignType);
否则可能会出现支付签名不对的情况;
另外,相应的MD5加密和SHA加密的编码也需要更改,如不更改,可能会出现,body全是英文可以进行付款,但如果有中文,就无法进行付款了。
byte[] btInput = System.Text.Encoding.Default.GetBytes(s); ======> byte[] btInput = System.Text.Encoding.UTF8.GetBytes(s);
JS API调用支付方法这里就不贴了,文档里面有;
d.关于支付成功后,后台通知页面,需要使用Request.QueryString来接收数据,不要使用Request.Form,要不然你会接收不到数据,同时也需要处理发送过来的xml数据
可以使用
Stream inputStream = Request.InputStream; byte[] b = new byte[inputStream.Length]; //将输入流读入字节数组 inputStream.Read(b, 0, (int)inputStream.Length); //将字节数组转换为经过编码的字符串 string inputStr = System.Text.Encoding.UTF8.GetString(b);
然后用XmlDocument 来处理数据
f.订单的查询及其它工作,相信你把支付搞定,应该是不成问题的。要注意的就是什么字段需要参与加密什么的。
g.订单查询等请使用文档提供的api,注意是https,不要搞错了