请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师好,out_trade_no 返回不了。

图片描述

	data = {
		# 服务商APPID
		'appid': config_mina['appid'],
		# 服务商商户号
		'mch_id': config_mina['mch_id'],
		# 小程序appid
		'sub_appid': config_mina['sub_appid'],
		# 子商户号
		'sub_mch_id': config_mina['sub_mch_id'],
		# 随机字符
		'nonce_str': target_wechat.get_nonce_str(),
		# 商品描述
		'body': '订餐',
		# 商户订单号
		'out_trade_no': pay_order_info.order_sn,
		# 总金额 单位 分
		'total_fee': int(pay_order_info.total_price * 100),
		# 通知地址
		'notify_url': notify_url,
		# 交易类型
		'trade_type': "JSAPI",
		'sub_openid': oauth_bind_info.openid
	}
def orderCallback():

	result_data = {
		'return_code': 'SUCCESS',
		'return_msg': 'OK'
	}
	header = {'Content-Type': 'application/xml'}
	# 返回结果集
	config_mina = app.config['MINA_APP']
	target_wechat = WeChatService(merchant_key=config_mina['paykey'])
	callback_data = target_wechat.xml_to_dict( request.data )
	app.logger.info(callback_data)
	sign = callback_data['sign']
	callback_data.pop('sign')
	# 产生新的sign
	gene_sign = target_wechat.create_sign(callback_data)
	app.logger.info(gene_sign)

	# 判断 我们产生的sign 和原来的sign 的值
	if sign != gene_sign:
		# 不等于是 让 return_code,return_msg 都赋值 FAIL
		result_data['return_code'] = result_data['return_msg'] = "FAIL"
		# 返回xml 信息
		return target_wechat.dict_to_xml(result_data), header

	order_sn = callback_data['out_trade_no']
	pay_order_info = PayOrder.query.filter_by(order_sn=order_sn).first()
	if not pay_order_info:
		result_data['return_code'] = result_data['return_msg'] = 'FAIL'
		return target_wechat.dict_to_xml(result_data), header

	# 判断金额
	if int( pay_order_info.total_price * 100) != int(callback_data['total_fee']):
		result_data['return_code'] = result_data['return_msg'] = 'FAIL'
		return target_wechat.dict_to_xml(result_data), header

	if pay_order_info.status == 1:
		return target_wechat.dict_to_xml(result_data), header

	target_pay = PayService()
	target_pay.orderSuccess( pay_order_id = pay_order_info.id,  params={"pay_sn": callback_data['transaction_id']})

	# 将 微信回调的结果放入记录 表pay_order_callback_data 中
	target_pay.addPayCallbackData(pay_order_id=pay_order_info.id, data=request.data)
	return target_wechat.dict_to_xml(result_data), header

这里有写的,
模拟是 遇到了 上面一样的问题。 成功付款的。
用的 服务商模式。服务商, 子商户 信息都正确的。也成功付款成功了。
就是不能 模拟出来 商品订单号 。

正在回答 回答被采纳积分+3

3回答

编程浪子 2020-04-02 00:43:40

你好

如果是你用postman 模拟,那就自己要加这个参数,模拟也要把所有参数填写完整。终于搞明白了,哈哈

0 回复 有任何疑惑可以回复我~
  • 提问者 慕虎7527636 #1
    是的,谢谢老师的回复。
    回复 有任何疑惑可以回复我~ 2020-04-02 00:45:01
编程浪子 2020-04-01 19:05:10

你好

我现在有点迷糊,我有如下疑问

1:你说的模拟是撒意思,因为你是服务商模式,那应该就不是模拟,是正常支付了把


0 回复 有任何疑惑可以回复我~
  • 提问者 慕虎7527636 #1
    老师好,上面是我自己操作错误了, 在postman模拟调回的过程中Body中的数据用的不是服务商模式的信息。所以出现了错误。
    然后发现 回调在本地计算机做不出来。就写了代码过去了。能够正常付款。
    回复 有任何疑惑可以回复我~ 2020-04-01 21:53:32
编程浪子 2020-04-01 00:29:21

你好

你是怎么模拟的? 如果服务商不返回这个字段就没有了,没有就算了,把这个字段获取去掉就行了。

人家不返回 你就没有办法去获取

0 回复 有任何疑惑可以回复我~
  • 提问者 慕虎7527636 #1
    老师好, 我是这样修改的 。 
    获取不到 订单号, 所以在 /order/callback 中 oeder_sn 我还是从 数据库查询了。这样的话 模拟返回值是 FATI
    回复 有任何疑惑可以回复我~ 2020-04-01 11:47:22
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信