微信APP支付服务端
一、开发所需前提:
1、在微信开放平台(https://open.weixin.qq.com/)创建移动应用并审核通过,获得该移动应用的AppID、AppSecret;
2、在商户平台(https://pay.weixin.qq.com)完成商户号账户验证、签约后,获得MCHID(mch_id,商户号)、API密钥(APIKey,自己设置的,一个长度为32位、由数字和大小写字母组成)。
二、业务流程:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3
三、其他。名词解释
支付宝APP支付服务端
一、几个要点:
1、在蚂蚁的开放平台https://open.alipay.com 已经创建应用,开通APP支付,拿到APPID、PartnerID(合作者ID)、APP_PRIVATE_KEY(支付宝私钥)、ALIPAY_PUBLIC_KEY(支付宝公钥);
2、若应用的状态处于开发中,则调试时只能用沙箱环境。应用上线后把沙箱网关改回上线网关;
3、直接下载SDK来集成,下载地址:https://docs.open.alipay.com/54/106370/
4、SDK使用的核心代码:
.NET服务端SDK生成APP支付订单信息示例:
IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_PRIVATE_KEY, "json", "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); model.Body = "我是测试数据"; model.Subject = "App支付测试DoNet"; model.TotalAmount = "0.01"; model.ProductCode = "QUICK_MSECURITY_PAY"; model.OutTradeNo = "20170216test01"; model.TimeoutExpress = "30m"; request.SetBizModel(model); request.SetNotifyUrl("外网商户可以访问的异步地址"); //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = client.SdkExecute(request); //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 Response.Write(HttpUtility.HtmlEncode(response.Body)); //页面输出的response.Body就是orderString 可以直接给客户端请求,无需再做处理。
上面返回的response.Body直接返回给APP端调起支付即可。
.NET服务端验证异步通知信息参数示例:
/// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组 /// request回来的信息组成的数组 public Dictionary<string, string> GetRequestPost() { int i = 0; IDictionary<string, string> sArray = new IDictionary<string, string>(); NameValueCollection coll; //Load Form variables into NameValueCollection variable. coll = Request.Form; // Get names of all forms into a string array. String[] requestItem = coll.AllKeys; for (i = 0; i < requestItem.Length; i++) { sArray.Add(requestItem[i], Request.Form[requestItem[i]]); } return sArray; } //这里就是验签 bool flag = AlipaySignature.RSACheckV1(GetRequestPost(), ALIPAY_PUBLIC_KEY, charset, "RSA2", false);