微信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);