符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
1.客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:
站在用户的角度思考问题,与客户深入沟通,找到龙岩网站设计与龙岩网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广、域名与空间、网站空间、企业邮箱。业务覆盖龙岩地区。
params.put("appid", appID);// 微信appid,选择性上传,服务器写死亦可
params.put("money", money);// 支付金额,单位:分
params.put("name", goodsName);// 商品名称
params.put("currencytype", "CNY");// 支付币种,只能填CNY,代表人民币12341234
备注:以上是参数字段是我们公司服务器定义,给服务器用以获取预支付订单号prePayId用。
备注2:详细字段请参考:
2.app服务器调用微信“统一下单”接口,得到prePayId订单号并返回prePayId给手机客户端;
3.手机客户端使用prePayId及商品信息调起微信客户端进行支付;
3.1用户操作:输入密码进行支付;返回键取消支付;网络无连接支付失败等;
4.微信客户端回调支付结果给咱们的APP客户端;
5.微信服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)
这个其实很简单的,demo文档写得很详细,直接上代码吧:
/**
* 获取sign签名
*
* @return
*/
private String genPayReq() {
// 获取参数的值
PayReq request = new PayReq();
request.appId = ConstantsMember.APP_ID;
request.partnerId = ConstantsMember.MCHID;
request.prepayId = mPrepayId;
request.packageValue = "Sign=WXPay";
request.nonceStr = DataUtil.getGuid();
request.timeStamp = DataUtil.getTimeStamp();
// 把参数的值传进去SortedMap集合里面
SortedMapObject, Object parameters = new TreeMapObject, Object();
// {appid=wx34df375d7dae8c90, noncestr=3BF34EF2CA4A462DB8D4EA48E785CDC3,
// package=Sign=WXPay, partnerid=1349967601,
// prepayid=wx2016070910354542c7155d4e0846850809, timestamp=1468031760}
parameters.put("appid", request.appId);
parameters.put("noncestr", request.nonceStr);
parameters.put("package", request.packageValue);
parameters.put("partnerid", request.partnerId);
parameters.put("prepayid", request.prepayId);
parameters.put("timestamp", request.timeStamp);
String characterEncoding = "UTF-8";
String mySign = createSign(characterEncoding, parameters);
System.out.println("我的签名是:" + mySign);
return mySign;
}
/**
* 微信支付签名算法sign
*
* @param characterEncoding
* @param parameters
* @return
*/
public static String createSign(String characterEncoding,
SortedMapObject, Object parameters) {
StringBuffer sb = new StringBuffer();
Set es = parameters.entrySet();// 所有参与传参的参数按照accsii排序(升序)
Iterator it = es.iterator();
while (it.hasNext()) {
@SuppressWarnings("rawtypes")
Map.Entry entry = (Map.Entry) it.next();
String k = (String) entry.getKey();
Object v = entry.getValue();
if (null != v !"".equals(v) !"sign".equals(k)
!"key".equals(k)) {
sb.append(k + "=" + v + "");
}
}
sb.append("key=" + ConstantsMember.KEY); //KEY是商户秘钥
String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding)
.toUpperCase();
return sign; // D3A5D13E7838E1D453F4F2EA526C4766
// D3A5D13E7838E1D453F4F2EA526C4766
}
前段时间出去玩了一段时间,回公司得知一个惊天消息——微信支付出问题了!!!这个问题比较奇怪,说是部分机型可以支付成功,部分机型如小米、三星无法调起支付,返回-1。
众所周知返回-1的话代表了各种各样的错误(坑),所以只好从头开始排查,首先排查 WXPayEntryActivity.java 这个文件是否放在了 .wxapi包 下,及 manifest里的注册是否为.wxapi.WXPayEntryActivity ,确定无误后检查后台返回的参数是否有误
至此如果都正确,可以开始着手检查在后台里的参数设置是否正确
这里需要注意的是应用签名和应用包名,因为出问题的包不是由我打包的,我怀疑问题在于应用签名对不上,最后发现果然如此。打包的同事使用了另一个keystore文件进行打包,导致应用签名与后台填写的不一致,于是重新生成了签名更新后台设置,问题解决。
至于为什么部分机型可以正常支付,而部分机型无法调起,我参照有些coder遇到的问题“微信支付只能成功调起一次”
因为成功支付的机型为公司测试机,而不成功的机型是用户机,猜测因为公司测试机里曾经调试过微信支付,有正确的包名和签名的缓存,微信在调起时直接读取缓存值,验证正确后直接调起,而当缓存值出错时微信才会再次去读取新的包名和签名重新验证,因此出现了部分机型可支付的问题。也因为这个原因, 修改完签名后再次调试,第一次返回的还是-1,但再次点击就可以成功调起,此后也没有再返回-1。 个人猜测,如有错误欢迎指出讨论。
微信支付的坑实在是太多了,还有OC编写的iOS的IAP也有很多藏起来的坑,一直想把Unity内调用Java集成的微信、支付宝支付,使用OC集成的iOS内购详细过程写上来,但是一直犯懒。。这段时间一定要写好,给自己做个记录,也给大家作为一个参考。
这个我之前也遇到。确实是公钥出了问题。
在本地生成一份。
在官网获取一份。
一步步检查。会解决的。这个问题就是公钥或是密钥的问题。
支付宝集成流程
主要的回调返回类两个:PayResult与AuthResult
支付接口的调用:
支付结果的接收:
Android开发集成转账功能,那么需要集成第三方支付平台,例如支付宝,微信等等。
集成方式:
到官网申请开发者帐号
登录开发者帐号,申请密钥
下载集成SDK
集成到Android Project中
按SDK说明文档调用支持即可