深圳硕软技术有限公司 技术支持中心 24小时服务电话:0755-82682968 在线远程协助QQ:2513402938
搜索:     高级搜索

JAVA/C# API商户协议-多业务接口 充值DEMO

文章ID: 78
最近更新: 2017年 06月 16日
Revision: 1
添加评论
查看: 0
评论: 0
发表: 2017年 06月 16日
通过 Ltisn L.
更新: 2017年 06月 16日
通过 Ltisn L.

一、JAVA 充值DEMO

package hk.sohan.card.web.timer;

import hk.sohan.card.core.util.AppUtils;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

public class SRRechargeDemo {

    public static void recharge(String orderId, int chargeType, String operatorType, String mobile, String unitPrice) throws Exception {
        JSONObject json = new JSONObject();
        json.put("action", "CZ");// 交易指令码[充值]
        json.put("orderId", orderId);// 订单号
        json.put("chargeAcct", mobile);// 充值号码[手机、固话号码、QQ号码等
                                        // 固话和宽带需要带区号,但不要分隔符。如:075588889999]
        json.put("chargeCash", unitPrice);// 充值金额[单位:元]
        json.put("chargeType", chargeType);// 充值类型[0:手机充值,1:流量充值,2:固话充值,3:宽带充值]
        if (2 == chargeType || 3== chargeType) {
            // 移动|联通|电信[充值固话和宽带时必填]
            json.put("ispName", "电信");
        }
        json.put("retUrl", "http:\\/\\/www.baidu.com\\/rest");
        String jsonStr = json.toString().replaceAll("\\\\\\\\", "\\\\");
        String sign = AppUtils.md5Hex(jsonStr + "0FE8E43F53BB5848");
        System.out.println("签名原文:" + jsonStr + "0FE8E43F53BB5848");

        JSONObject params = new JSONObject();
        params.put("sign", sign);
        params.put("agentAccount", "api_test");
        params.put("busiBody", json);
        String paramsStr = params.toString().replaceAll("\\\\\\\\", "\\\\");

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost method = new HttpPost("http://api.sohan.hk:50080/API");

        StringEntity entity = new StringEntity(paramsStr, "GBK");
        System.out.println("提交:" + EntityUtils.toString(entity, "GBK"));
        entity.setContentType("application/json");
        method.setEntity(entity);

        HttpResponse result = httpClient.execute(method);
        String resData = EntityUtils.toString(result.getEntity(), "GBK");
        System.out.println(resData);

    }

    public static void main(String[] args) throws Exception {
        recharge("075586396893031", 3, "1", "075586396893", "1");
    }
}


二、C# 充值DEMO

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Newtonsoft.Json;

namespace Sohan.API.Demo
{
    class Program
    {
        private static string apiUrl = "http://127.0.0.1:50080/API"; //api 服务器 地址
        private static string userAcct = "SH-20120209064"; //api访问账户
        private static string apiKey = "7A6E0E326AF4444A"; //api访问密钥
        private static string returnUrl = "http://127.0.0.1:9900/";  //回调推送地址
        static void Main(string[] args)
        {
            var orderId = DateTime.Now.ToString("yyyyMMddHHmmss"); //为了方便demo调用, orderId使用了当前时间, 请修改为自己的商户订单号Id

            //Recharge(orderId, "13632622349",10, 0); //话费充值 调用
            
            //Recharge(orderId, "13632622349", 3, 1, "", 0, 10); //流量充值 调用

            Recharge(orderId, "075582672995", 100, 2,"电信"); //固话充值调用

            //Recharge(orderId, "0539-053900691159", 100, 3, "联通"); //宽带充值调用

            Console.ReadKey();
        }

        /// <summary>
        /// 充值缴费
        /// </summary>
        /// <param name="orderId">商户订单号(保证唯一)</param>
        /// <param name="chargeAcct">充值号码</param>
        /// <param name="chargeCash">充值金额</param>
        /// <param name="chargeType">充值类型.(目前demo只提供 0:手机充值 1:流量充值  2:固话充值 3:宽带充值)</param>
        /// <param name="flowPackageType">充值流量类型  0:国包 1:省包 (手机话费充值时忽略)</param>
        /// <param name="flowPackageSize">充值流量兆数 (手机话费充值时忽略)</param>
        static void Recharge(string orderId,string chargeAcct,int chargeCash,int chargeType,string ispName="",int flowPackageType=0,int flowPackageSize=0)
        {
            if (chargeType == 1 && flowPackageSize==0) // cahrgeType 流量充值时, flowPackSize必须传.
            {
                Console.WriteLine("流量充值时, flowPackageSize 是必填值,不能为0");
                return;
            }

            var busiModel = new //业务model
            {
                action = "CZ",
                orderId,
                chargeAcct,
                chargeCash,
                chargeType,
                flowPackageType,
                flowPackageSize,
                qqProvince = "",
                chargeAmount = 1,
                productSn = "",
                ispName,
                retUrl = HttpUtility.UrlEncode(returnUrl)
            };

            var busiJson = JsonConvert.SerializeObject(busiModel); //得到业务报文的json串, 用于加密

            var md5Source = busiJson + apiKey;

            Console.WriteLine("签名原串:"+md5Source+ "\r\n");

            var sign = MD5Encrypt(md5Source); //签名

            Console.WriteLine("签名结果:"+sign+"\r\n");

            var requsetModel = new //请求model
            {
                agentAccount = userAcct,
                sign,
                busiBody = busiModel
            };
            var requestJson = JsonConvert.SerializeObject(requsetModel);// 使用JsonConvert序列化成Json请引入 Newtonsoft.Json

            Console.WriteLine("提交报文:"+requestJson+ "\r\n");


            var response = HttpPost(requestJson, apiUrl, "text/plain"); //获取响应结果
            
            Console.WriteLine("响应结果:"+response+ "\r\n");
        }

        public static string HttpPost(string postData, string url, string contentType = "application/x-www-form-urlencoded")
        {
            var req = (HttpWebRequest)WebRequest.Create(url);

            var encoding = Encoding.GetEncoding("gb2312");

            byte[] bs = Encoding.GetEncoding("gb2312").GetBytes(postData);

            req.Method = WebRequestMethods.Http.Post;

            req.ContentType = contentType;
            req.ContentLength = bs.Length;

            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(bs, 0, bs.Length);
            }

            using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
            {
               string responseData;
               using (StreamReader reader = new StreamReader(response.GetResponseStream(),encoding))
                {
                    responseData = reader.ReadToEnd().ToString();
                }

                return responseData;
            }
        }

        public static string MD5Encrypt(string pToEncrypt)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] InBytes = Encoding.UTF8.GetBytes(pToEncrypt);
            byte[] OutBytes = md5.ComputeHash(InBytes);
            string OutString = "";
            for (int i = 0; i < OutBytes.Length; i++)
            {
                OutString += OutBytes[i].ToString("x2");
            }
            return OutString;
        }
    }
    
}

这篇文章是:  
前一个   下一个
外围对接模块开放协议     短信300问