【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

前言 

  最近有点空余时间,所以,就研究了一下APP支付。前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究。然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还兼容老的方法,但是新的既然出来了,肯定研究新的了。但是网上几乎都是旧的方法,所以,唯有自己看官方的文档,慢慢一步一步研究了。在研究的过程中,发现,他跟微信支付的差别蛮大的。好了废话不多说了,下面直接来干货。

  •         首先,你得去蚂蚁金服开放平台申请一个应用,地址:https://openhome.alipay.com注册一个应用,如下图:
 
    应用申请下来之后,需要申请功能,我们这里用到的是“APP支付”功能。如下图:
 
 
   如果需要查看相关的文档,那就点击“APP支付”就可以跳转到相关的文档,这里我直接给出APP需要看到的文档,地址: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.J9S7XU&treeId=204&articleId=105465&docType=1  如下图:
 
 
   我们在编写服务端的时候,需要用到两个参数,一个是APPID,这个上面的图里面有,还有一个就是密钥,这个是通过签名工具生成,可以通过下面这个地址下载工具,然后生成,地址: https://doc.open.alipay.com/doc2/detail.htm?treeId=200&articleId=105351&docType=1
 
 
 
   下载这个工具,然后解压,双击“ 支付宝RAS密钥生成器SHAwithRSA1024_V1.0.bat ”生成即可,这里要注意: TIPS: 工具不支持含中文或空格的路径,请下载到英文目录下使用。
打开工具后,如下图:
 
 
   先“生成密钥”,然后再复制公钥,然后把公钥复制到平台,如下图:
 
 
 
   再保存,如下图:
 
 
   然后再验证公钥的正确性,这里,可以写个小工具来验证,方法如下:
        /// <summary>
        /// 测试公钥是否对
        /// </summary>
        /// <returns></returns>
        public string testsign()
        {
            string privtekey = Config.privtekey;//这个就是生成器里面的那个私钥,第一个大框框那里的.
            string data = "a=123";//平台上提供的串
            string sign = RSAFromPkcs8.sign(data, privtekey, "utf-8");
            return sign;
        }
然后再把这个sign的值,复制出来,然后再点击“验证公钥正确性”,如下图:
 
 
   然后输入你的“sign”的值:
 

 
 
   点击“验证”后,如果提示验证通过,那么你这个签名的方式就是对了,如下图:
 
 
 
   再点击“保存”即可。
接下来,我就写一下服务端生成相应的串的方法,全部贴出来,方便大家模仿吧,其实大家按照下面这个图,慢慢研究,也可以的,如下图:
 
 
 
   最后,我们要给回到APP的参数是这个,只要我们按照规则返回即可。下面,我把方法贴出:
 
    public class AliPayController : Controller
    {
        public Dictionary<stringstring> PayInfo = new Dictionary<stringstring>();
        //
        // GET: /AliPay/
        public ActionResult Index()
        {
            testsign();
            GetPayInfo("0.01");
            return View();
        }
 
        /// <summary>
        /// 测试公钥是否对
        /// </summary>
        /// <returns></returns>
        public string testsign()
        {
            string privtekey = Config.privtekey;//这个就是生成器里面的那个私钥,第一个大框框那里的.
            string data = "a=123";//平台上提供的串
            string sign = RSAFromPkcs8.sign(data, privtekey, "utf-8");
            return sign;
        }
 
 
        /// <summary>
        /// 获取支付信息
        /// </summary>
        /// <param name="_amount"></param>
        /// <returns></returns>
        public string GetPayInfo(string _amount)//_amount:付款金额
        {
            string strJson = string.Empty;
            try
            {
                string orderInfo = GetOrderInfoWithOutEncode(_amount);
                // 对订单做RSA 签名
                string sign = RSAFromPkcs8.sign(orderInfo, Config.privtekey, "utf-8");
                //仅需对sign做URL编码
                sign = HttpUtility.UrlEncode(sign, Encoding.UTF8);
                string payInfo = GetOrderInfoWithEncode() + "&sign=" + sign;
                strJson = payInfo.Replace("+""%20");//日期那里会有一个空格(2017-01-05 11:11:11)转化为+,所以这里要替换一下
                FileLog.WriteLog("支付宝串:" + strJson);
            }
            catch (Exception ex)
            {
                FileLog.WriteLog(ex.ToString());
 
            }
            return strJson;
        }
        /// <summary>
        /// 不包含Encode的字符串拼接
        /// </summary>
        /// <param name="price"></param>
        /// <returns></returns>
        public string GetOrderInfoWithOutEncode(string price)
        {
            PayInfo.Add("app_id"Config.app_id);
            PayInfo.Add("biz_content", GetBizContent(price));
            PayInfo.Add("charset""utf-8");
            PayInfo.Add("format""json");
            PayInfo.Add("method""alipay.trade.app.pay");
            PayInfo.Add("notify_url""http://wxpay.lmx.ren/ResultNotify");
            PayInfo.Add("sign_type""RSA");
            PayInfo.Add("timestamp"DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            PayInfo.Add("version""1.0");
            string strUrl = BuildQueryWithOutEncode(PayInfo);
            return strUrl;
        }
        /// <summary>
        /// 包含Encode的字符串拼接
        /// </summary>
        /// <param name="price"></param>
        /// <returns></returns>
        public string GetOrderInfoWithEncode()
        {
            string strUrl = BuildQuery(PayInfo, "utf-8");
            return strUrl;
        }
        /// <summary>
        /// 获取支付内容详情
        /// </summary>
        /// <param name="total_amount"></param>
        /// <returns></returns>
        public string GetBizContent(string total_amount)
        {
            Dictionary<stringstring
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值